我不确定STL容器在传递时是否会被完全复制。首先,它起作用了(所以没有添加"fluttershy“元素,这很好)。然后我想跟踪条目的构造和销毁...
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
using namespace std;
int nextid = 0;
class Entry {
public:
string data;
int myid;
Entry(string in) {
data = in;
myid = nextid;
nextid++;
printf("Entry%02d\n", myid);
}
~Entry() { printf("~Entry%02d\n", myid); }
};
class Meep {
public:
vector<Entry> stuff;
};
void think(Meep m) {
m.stuff.push_back(Entry(string("fluttershy")));
}
int main() {
Meep a;
a.stuff.push_back(Entry(string("applejack")));
think(a);
vector<Entry>::iterator it;
int i = 0;
for (it=a.stuff.begin(); it!=a.stuff.end(); it++) {
printf("a.stuff[%d] = %s\n", i, (*it).data.c_str());
i++;
}
return 0;
}
生成以下意外输出( http://ideone.com/FK2Pbp ):
Entry00
~Entry00
Entry01
~Entry00
~Entry01
~Entry00
~Entry01
a.stuff[0] = applejack
~Entry00
a
只有一个元素是预期的,这不是问题所在。最让我困惑的是,一个条目怎么会被多次销毁?
发布于 2013-02-11 15:27:01
您看到的是临时实例的破坏。
a.stuff.push_back(Entry(string("applejack")));
这一行创建一个临时实例,然后将其复制到容器中的另一个新实例。那么临时文件就会被销毁。删除条目或销毁容器时,销毁容器中的实例。
https://stackoverflow.com/questions/14815145
复制