【发布时间】:2012-09-14 10:38:42
【问题描述】:
我试图弄清楚为什么我的 Tag 类的析构函数被调用
map<string, Tag>* TestLoader::loadCompoundTag()
{
map<string, Tag>* compound = new map<string, Tag>();
//Create locally scoped variable
Tag tag;
string tagName;
do
{
loadTag(tag, tagName);
//Copies variable into map
compound->insert(std::pair<string, Tag>(tagName, tag));
//Tag destructor is called before debugger breaks on this line
} while (tag.type != TAG_End);
return compound;
}
void TestLoader::loadTag( Tag& tag, string& name )
{
tag.i = 0;
name = string("Test");
}
谁能给我任何关于为什么在那里调用析构函数的想法?在循环的范围内没有定义任何变量,一个是在循环外创建的,另一个是在函数内创建的。谢谢!
【问题讨论】:
-
为什么不
std::shared_ptr<Tag> tag(new Tag());? -
我想避免动态创建它,因为当我对为什么正确的值最终出现在地图中但析构函数在循环结束
-
你确定被破坏的
Tag对象是tag,而不是std::pair<string, Tag>(tagName, tag)中的副本吗? -
是的,这就是问题所在,我没有意识到正在创建临时文件
标签: c++ scope destructor