c++ - 在类中声明成员时,指针是否比实例更好?

标签 c++ pointers object vector

选项 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 :

  1. 它是多态的吗?即,您是否知道编译时的确切类型,或者您是否可以拥有全部继承自同一基类型的不同运行时类型。多态 => 指针。
  2. 这个物体有多大?即,在堆栈上构造对象是否会超出我的堆栈分配?如果是小到中等大,那就没关系。巨大 => 指针。
  3. 我是否想确保只有我拥有一份拷贝(或者我的拷贝是唯一的)。这个对象是否会暴露给界面的其他部分。这是否会导致 API 中所有权的模糊性。如果是,那么指针可能不是最佳选择。这将是直接使用该对象的好例子。整体 API 清洁度 => 对象。

如果你确实使用指针,通常你会想要使用 boost::unique_ptr (如果该类是唯一的所有者),或者 boost::shared_ptr 如果数据可以在多个对象、线程等之间共享。极少数情况下是原始的,常规的 C++ 指针才是正确的选择。很难确定它们是什么。

关于c++ - 在类中声明成员时,指针是否比实例更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011753/

相关文章:

java - 子类对象如何访问父类(super class)的私有(private)变量,在java中除了类本身不能访问私有(private)变量?

javascript - 如何使用 document.write() 将对象写入文档

c++ - 不需要默认构造函数时 map operator[] 的安全性

c++ - 没有权重的树中有多少最小切割?

c++ - 比较 2 个字节数组的函数

c - 释放已分配的内存,消除错误

C - 将元素添加到结构指针

c++ - C++ 或 ANSI C 所用的周期数?

c++ - 以下代码片段的行为是什么?

javascript - 尝试使用循环向 Javascript 对象添加多个属性