选项 1:
class B{//};
class A
{
public:
void Funcs();
private:
std::vector<A> vecA;
};
选项2:
class B{//};
class A
{
public:
void Funcs();
private:
std::vector<A*> vecpA;
};
哪一个更好,有什么指南吗?
最佳答案
这是取决于具体场景的事情之一。以下是在这些不同选项之间做出决定时要问自己的不完整问题 list :
- 它是多态的吗?即,您是否知道编译时的确切类型,或者您是否可以拥有全部继承自同一基类型的不同运行时类型。多态 => 指针。
- 这个物体有多大?即,在堆栈上构造对象是否会超出我的堆栈分配?如果是小到中等大,那就没关系。巨大 => 指针。
- 我是否想确保只有我拥有一份拷贝(或者我的拷贝是唯一的)。这个对象是否会暴露给界面的其他部分。这是否会导致 API 中所有权的模糊性。如果是,那么指针可能不是最佳选择。这将是直接使用该对象的好例子。整体 API 清洁度 => 对象。
如果你确实使用指针,通常你会想要使用 boost::unique_ptr (如果该类是唯一的所有者),或者 boost::shared_ptr 如果数据可以在多个对象、线程等之间共享。极少数情况下是原始的,常规的 C++ 指针才是正确的选择。很难确定它们是什么。
关于c++ - 在类中声明成员时,指针是否比实例更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011753/