在旧的c ++风格中,我总是使用vector < shared_ptr < string> >
或vector < string* >
来避免在构建包含许多vector
个对象的大string
时进行内存复制。
从c ++ 11开始,c ++具有rvalue
和move
语义;我现在可以使用vector < string >
吗?
我正在使用gcc 7.1.0和clang 3.6和c ++ 14选项。
答案 0 :(得分:3)
在以下几种情况下,使用vector<shared_ptr<string>>
或vector<string*>
有助于在C ++ 11之前优化性能:
std::string
有非投掷移动构造函数,因此std::vector<string>
的push_back()应该不会慢于std::vector<std::shared_ptr<string>>
。std::vector<string>
这种情况也是合适的。如果您的目的是返回集合的副本而不是复制元素 - 这是std::vector<shared_ptr<string>>
仍可以提供帮助的唯一方法。但在这种情况下,我的建议是在集合之间共享不可变对象,即使用std::vector<shared_ptr<const string>>
。