【问题标题】:Pointer assignment inside function函数内部的指针赋值
【发布时间】:2015-08-20 11:11:40
【问题描述】:

我实际上无法弄清楚我在这里做错了什么。

所以基本上我有一个对象指针,我将它传递给一个函数以将其值设置为指向一个新的 Object 实例,但它似乎不起作用,我无法解决原因。下面是我正在尝试做的代码示例。

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

 in main:

 Object *pointer;
 GetPointer(pointer);

我还尝试立即初始化指针,但它确实有效,所以我真的无法理解上面的代码有什么问题。有什么建议吗?

   Object *pointer = new Object(); 

【问题讨论】:

  • 指针没什么特别的。将Object* 替换为int,您就会明白为什么它会以这种方式工作。
  • " 设置它的值" - 不,它没有。如果没有引用、第二级间接(指针到指针)或仅使用函数返回值,您所设置的只是自动变量的值,而不是调用者的指针。
  • 我明白了。当我将初始化转换为函数时,我认为这是相同的结果。

标签: c++ pointers


【解决方案1】:

你应该通过引用传递你的指针

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();

【讨论】:

  • 或者另一种经常与 COM 接口结合使用的方法是指向 void GetPointer(Object** PtrToObject) 中的指针的指针。
  • 像魅力一样工作。非常感谢。不过,我正在避免返回,因为我遵循一种输出应该重定向到指针的风格。
【解决方案2】:

我认为你应该从函数 GetPointer 中返回指针。像任何其他函数一样,每个参数在完成时都将被销毁。而且返回指针会让你的函数更有意义,因为它的名字上面有“get”。

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多