【发布时间】:2011-03-26 15:08:03
【问题描述】:
这是我的示例代码:
void test()
{
Object1 *obj = new Object1();
.
.
.
delete obj;
}
我在 Visual Studio 中运行它,它在“delete obj;”行崩溃。 这不是释放与对象关联的内存的正常方法吗? 我意识到它会自动调用析构函数……这正常吗?
这是一个代码sn-p:
if(node->isleaf())
{
vector<string> vec = node->L;
vec.push_back(node->code);
sort(vec.begin(), vec.end());
Mesh* msh = loadLeaves(vec, node->code);
Simplification smp(msh);
smp.simplifyErrorBased(errorThreshold);
int meshFaceCount = msh->faces.size();
saveLeaves(vec, msh);
delete msh;
}
loadleaves() 是一个从磁盘读取网格并创建Mesh 对象并返回它的函数。(想想vec 和node->code 只是有关要打开的文件的信息)
我应该删除delete msh; 行吗?
【问题讨论】:
-
让我们看看你的班级是什么样子的。你的析构函数可能有问题。
-
下面提到的
loadLeaves函数是否在堆上分配对象?还是返回本地地址或类似地址?记住,你只能delete你new... -
确保析构函数不是私有的!
标签: c++ object memory-management new-operator