所以我的问题是我想在给定地址上创建新对象.
MethodA()
{
TreeNode* nodeResult = NULL;
initObject(nodeResult);
//nodeResult is NULL anyway
}
void initObject(TreeNode* obj)
{
if(obj == NULL)
{
obj = new TreeNode();
}
}
Run Code Online (Sandbox Code Playgroud)
看起来新对象已创建但在initObject方法括号末尾删除.
这会失败,因为您的initObject方法想要修改调用者的变量,但是您要传递它的副本.将其更改为:
void initObject(TreeNode* &obj)
{
if(obj == NULL)
{
obj = new TreeNode();
}
}
Run Code Online (Sandbox Code Playgroud)
这将为initObject函数提供对调用者变量的引用,并且在函数返回后调用者可以看到对它的任何赋值.
您必须使用引用,因为指针是值类型
MethodA()
{
TreeNode* nodeResult = NULL;
initObject(nodeResult);
//nodeResult is NULL anyway
}
void initObject(TreeNode* & obj)
{
if(obj == NULL)
{
obj = new TreeNode();
}
}
Run Code Online (Sandbox Code Playgroud)