在旧的C++风格中,在构造包含许多vector < shared_ptr < string> >
对象的大vector < string* >
时,我总是使用vector
或string
来避免内存复制。
从c++ 11开始,c++具有rvalue
和move
语义;我现在可以使用vector < string >
吗?
我正在使用带有c++ 14选项的gcc 7.1.0和clang 3.6。
最佳答案
在C++ 11之前的几种情况下,使用vector<shared_ptr<string>>
或vector<string*>
可以帮助优化性能:
当您将元素添加到 vector 时,例如调用push_back()。
内存缓冲区将被重新分配,所有旧对象将被重新分配
复制到新缓冲区。
std::string
具有非抛出的move构造函数,因此在push_back()中,std::vector<string>
的速度应该不慢于std::vector<std::shared_ptr<string>>
的速度。 从函数返回作为局部变量的 vector 时
std::vector<string>
也是合适的。 在不同 vector 之间共享字符串
如果您打算返回集合的副本而不是复制元素,那么
std::vector<shared_ptr<string>>
仍然可以提供帮助。但是在这种情况下,我的建议是在集合之间共享不可变的对象,即使用std::vector<shared_ptr<const string>>
。关于c++ - C++ 14中的vector <string>或vector <shared_ptr <string >>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44380726/