【发布时间】:2016-02-05 12:08:34
【问题描述】:
#include <iostream>
#include <vector>
using namespace std;
class cMember
{
public:
int id;
cMember();
~cMember();
};
cMember::cMember()
{
cout<<"member constructor\n";
}
cMember::~cMember()
{
cout<<"member destructor\n";
};
class cDirectory
{
std::vector<cMember> memberList;
public:
cDirectory();
~cDirectory();
void Populate();
};
cDirectory::cDirectory()
{
cout<<"directory constructor\n";
}
cDirectory::~cDirectory()
{
cout<<"directory desctructor\n";
}
void cDirectory::Populate()
{
for(int i = 0; i < 2; i++)
{
cout<<"A\n";
cMember t;
memberList.push_back(t);
cout<<"B\n";
}
cout<<"C\n";
}
int main( int argc, const char ** argv )
{
cDirectory dir;
dir.Populate();
exit(0);
}
看看这个程序的输出,第二次迭代调用了 A 和 B 之间的成员析构函数。我假设这个调用是向量重新分配和重新填充,并在重新分配之前销毁它在其中的成员。
vector 怎么会破坏对象,而不是构造它们的替代品?
【问题讨论】:
-
阅读“3 规则”。您的类中也应该有一个复制构造函数和赋值运算符。
-
如您所说,vector 通过调用复制构造函数进行深层复制
-
如果你想调用默认构造函数而不是复制构造函数,你可以
emplace()新元素。
标签: c++ vector constructor destructor push-back