c++ - 我如何决定我应该使用指针还是常规变量?

标签 c++

在 C++ 中,我可以将字段声明为某种类型的常规变量,在构造函数中实例化它,并在以后使用它:

private:    Foo field;
...

A::A() {
    // upd: likely i instatiate field wrong ways (see comments)
    field = FieldImpl();
}
....
method(field);

或者我可以使用指针:

private:    Foo* field;
...

A::A() {
    field = new FieldImpl();
}

A::~A() {
    delete field;
}

...
method(*field);

在声明字段时,我如何决定是使用指针还是常规变量?

最佳答案

如果出现以下情况,您可能需要使用指针:

  • 被引用的对象可以比父对象长寿。
  • 由于大小,您希望确保引用的对象在堆上。
  • 指针是从类外部提供的。
  • Null 是一个可能的值。
  • 该字段可以动态设置为不同的对象。
  • 实际对象类型在运行时确定。例如,该字段可能是指向多个子类中的任何一个的基类指针。

您可能还想使用 smart pointer .

上面的最后一点适用于您的示例代码。如果您的字段是 Foo 类型,并且您为其分配了一个 FieldImpl,那么剩下的就是 FieldImpl 的 Foo 部分。这被称为 slicing problem .

关于c++ - 我如何决定我应该使用指针还是常规变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16089778/

相关文章:

c++ - 将一个字节放在硬盘上一个非常特定的地址,可以做到吗? (例如使用 C++)

c++ - std::shuffle 不能用 std::list 编译

python - 独特的骰子组合

c++ - 将 uint64_t rdtsc 值转换为 uint32_t

c++ - 具有派生类的回调的应用程序设计

C++ 线程从线程

c++ - 如何捕获最多N次的重复组?

c++ - 如何访问 std::shared_ptr 方法

VS 2008 中的 C++ 0x 错误

c++ - 使用-static的 undefined reference ?