這裏是我有一個示例代碼:刪除在C++的對象
void test()
{
Object1 *obj = new Object1();
.
.
.
delete obj;
}
我在Visual Studio中運行它,並且它崩潰在與線「刪除OBJ;」。 這不是通常的方式來釋放與對象關聯的內存嗎? 我意識到它會自動調用析構函數......這是正常的嗎?
下面的代碼片段:
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;
行嗎?
讓我們看看你的課堂是什麼樣子。你的析構函數可能有問題。 – TheFuzz 2010-08-07 02:56:00
下面提到的'loadLeaves'函數是否在堆上分配對象?或者它是否返回本地地址或類似的地址?記住,你只能'刪除'你'新'... – 2010-08-07 05:44:29
確保析構函數不是私有的! – Vaibhav 2013-08-08 08:29:56