Ecco un esempio di codice che ho:Eliminazione di un oggetto in C++
void test()
{
Object1 *obj = new Object1();
.
.
.
delete obj;
}
l'eseguo in Visual Studio, e si blocca alla linea con 'cancellare obj;'. Non è questo il modo normale per liberare la memoria associata ad un oggetto? Mi sono reso conto che richiama automaticamente il distruttore ... è normale?
Ecco un frammento di codice:.
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()
è una funzione che legge una maglia da disco e crea un oggetto Mesh
e lo restituisce (si pensi vec
e node->code
sono solo informazioni sulla file da aprire)
Devo rimuovere la linea delete msh;
?
consente di visualizzare l'aspetto della classe. potresti avere qualcosa di sbagliato con il tuo distruttore. – TheFuzz
La funzione 'loadLeave' menzionata di seguito alloca l'oggetto sull'heap? o restituisce l'indirizzo di un locale o qualcosa del genere? ricorda, puoi solo "cancellare" ciò che sei nuovo "... –
Assicurati che il distruttore non sia privato! – Vaibhav