#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規則」。你也應該在你的類中有一個拷貝構造函數和賦值操作符。 – Joe
如你所知,vector通過調用拷貝構造函數來做深層拷貝 – blade
如果你想調用默認的構造函數而不是拷貝構造函數,你可以'emplace()'新元素。 – Davislor