正确实现指针变量

时间:2015-08-11 21:09:39

标签: c++

为存储在指针中的类变量实现set函数的好习惯是什么(由于需要多态性)。

我是否通过引用将指针传递给set函数或对象? 还有什么是教科书确保不存在内存泄漏的方法? (不幸的是,我无法使用智能指针。)

我看到它的方式我有两个选择:

class A {
  B* b;
  setB(B& newB) {
     delete b;
     b = &newB;
  }

  //vs:

  setB(B* newB) {
     delete b;
     b = newB;
  }
};

1 个答案:

答案 0 :(得分:1)

从C ++ 11开始,我认为正确的方法是使用std::unique_ptr<B>

#include <memory>

class A {
  std::unique_ptr<B> b;
  void setB(std::unique_ptr<B>&& newB) {
     b = std::move(newB);
  }
};

并调用它,执行:

std::unique_ptr<B> b(new B(/* ... */));
obj_A.setB(std::move(b));

std::unique_ptr<B>&&类型的参数将确保您的函数的用户正在获取指向您自己的指针的所有权。

编辑:

正如Univise所指出的,OP并不想使用智能指针。我无法从问题中推断出为什么会这样,但如果是关于资源使用,请知道使用这样的std::unique_ptr开销无论是编译代码大小还是指针对象大小都是零开销。 / p>