私の問題は、指定されたアドレスに新しいオブジェクトを作成したいということです。C++メソッドで新しいオブジェクトを作成
MethodA()
{
TreeNode* nodeResult = NULL;
initObject(nodeResult);
//nodeResult is NULL anyway
}
void initObject(TreeNode* obj)
{
if(obj == NULL)
{
obj = new TreeNode();
}
}
新しいオブジェクトがinitObject
方法のブラケットの最後に作成されますが、削除されたように思えます。
が正解だ、それは、オブジェクトがあなたのコード内で削除されていないことは注目に値します、あなたはそれへのポインタを失ってしまいました。オブジェクトを作るためにC++で 'new'を呼び出すと、ポインタに' delete'を呼び出すまでは削除されません。最近のコンベンションでは、 'std :: shared_ptr'と' std :: unique_ptr'を利用して、できるだけ手動でこれを行う必要がなくなりました。それらとそれらの背後にあるメモリ管理/所有権の概念を読んでください。 –
@ MatthewWaltonのコメントは答えの1つに追加する必要があります。 –
ポインタについて特別なことは何もありません。あなたが 'void initNumber(int x){if(x == 0)x = 42; } void f(){int x = 0; initNumber(x); } '、あなたは何が起こるかを理解するでしょう。 – molbdnilo