asd*_*cap 5 c++ qt pointers std
在学习c ++时,我首先使用Qt库而不是标准的C++,STL和所有这些(好吧,所以我是c ++的新手,被Qt宠坏了).在Qt上,QString使用了隐式共享,因此我只需将其复制到另一个变量,如:
QString var1=QString("Hi there!");
QString var2=var1
Run Code Online (Sandbox Code Playgroud)
如果没有太多开销,这样做会很好.但是现在,我正在尝试使用std :: string,我应该这样做
std::string var1=std::string()
Run Code Online (Sandbox Code Playgroud)
要么
std::string* var1=new std::string()
Run Code Online (Sandbox Code Playgroud)
而且,QVector和std :: vector怎么样.如果我必须使用指针...任何提示?
是否std::string使用copy-on-write取决于实现(即您的标准库供应商决定).但是,大多数std::string实现都不会使用COW,主要是因为大多数(如果不是全部)读取操作都强制复制 - operator[]返回引用,c_str()并data()返回指针.将此与比较QString::operator[],返回一个代理对象.
尽管如此std::string,除非您确定(通过测量)字符串副本是应用程序中的瓶颈,否则不要使用指针.
另外,要注意QString存储UTF-16字符串,而std::string存储一系列chars - QByteArray将是Qt等价物.