C++ 函数内部的指针赋值

C++ 函数内部的指针赋值,c++,pointers,C++,Pointers,我真的不知道我做错了什么 所以基本上我有一个对象指针,我把它传递给一个函数,设置它的值,指向一个新的对象实例,但它似乎不起作用,我也不能解释为什么。下面是我试图做的一个代码示例 GetPointer(Object *pointer){ pointer = new Object(); } in main: Object *pointer; GetPointer(pointer); 我还尝试了立即初始化指针,这很有效,所以我真的无法理解上面的代码出了什么问题。有什么建议吗

我真的不知道我做错了什么

所以基本上我有一个对象指针,我把它传递给一个函数,设置它的值,指向一个新的对象实例,但它似乎不起作用,我也不能解释为什么。下面是我试图做的一个代码示例

 GetPointer(Object *pointer){
     pointer = new Object();
 }

 in main:

 Object *pointer;
 GetPointer(pointer);
我还尝试了立即初始化指针,这很有效,所以我真的无法理解上面的代码出了什么问题。有什么建议吗

   Object *pointer = new Object(); 

您应该通过引用传递指针

void GetPointer(Object *&pointer)
{
     pointer = new Object();
}

Object *pointer;
GetPointer(pointer);
或者只返回指针:

Object* GetPointer()
{
     return new Object();
}

Object *ptr = GetPointer();
或者更好:

std::unique_ptr<Object> GetPointer()
{
     return std::unique_ptr{new Object()};
}

auto ptr = GetPointer();
std::unique_ptr GetPointer()
{
返回std::unique_ptr{new Object()};
}
自动ptr=GetPointer();

我认为应该从函数GetPointer内部返回指针。与任何其他函数一样,每个参数在完成时都是析构函数。返回指针将使函数更有意义,因为它的名称上有“get”。

指针没有什么特别的。用
int
替换
Object*
,你就会明白它为什么会这样工作。“设置它的值”-不,它不会。没有引用,没有第二级间接寻址(指针指向指针),或者仅仅使用函数返回值,您所设置的只是自动变量的值,而不是调用方的指针。我明白了。当我将初始化转换为函数时,我认为这是相同的结果。或者在COM接口中经常看到的另一种方法是指向指针的指针,如
void GetPointer(Object**ptrtoom)
。工作起来很有魅力。谢谢。尽管如此,我还是避免返回,因为我遵循的是一种输出应该重定向到指针的风格。