【发布时间】:2014-03-16 14:57:20
【问题描述】:
好的,我先放代码,然后问我的问题。
#include<vector>
#include<string>
using std::vector;
using std::string;
class MyStringContainer
{
public:
MyStringContainer(vector<string> strVec): _strVec(strVec){;}
MyStringContainer(MyStringContainer&& rhs): _strVec(move(rhs._strVec)){;}
private:
vector<string> _strVec;
}
int main()
{
vector<string> dummyVec(1000000, "arbitrary string");
MyStringContainer strCon1(dummyVec);
MyStringContainer strCon2(move(strCon1));
}
所以我刚刚花了一些时间学习移动语义,我想我已经了解了关于如何交换原始和/或智能指针并将丢弃的指针设置为 nullptr 的基本概念。但是,在处理向量(以及所有实现移动语义的容器)时,我不能 100% 确定我上面的代码是否会正确地“nullptr”源向量的指针元素。 std::vector 类的实现是否已经为我处理了这个问题?
【问题讨论】:
-
什么指针元素?没有。但是你的代码很好。
-
@juanchopanza:我以为我在某处读到 std::vector 类确实包含一些指针(不确定,因为我是 stl/c++11 的新手),并且内存是为每个 push_back()/pop_back() 调用动态分配/解除分配,我认为它包含指针元素。
-
您可以将这些指针视为实现细节。您不必担心它们。
-
@juanchopanza:嘿伙计,谢谢。真的很感激。 :) 只是想确保我没有遇到任何内存泄漏。我真的来自老派 c++。
-
顺便说一句,您实际上不需要提供复制和移动复制构造函数。编译器生成的会做正确的事。