在 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/