c++ - 指向 vector 的指针 vs 指针 vector vs 指向指针 vector 的指针

标签 c++ pointers vector

只是想知道您认为关于 C++ 中 vector 的最佳实践是什么。

如果我有一个包含 vector 成员变量的类。
何时应将此 vector 声明为:

  • “整个对象” vector 成员变量包含值,即 vector<MyClass> my_vector;
  • 指向 vector 的指针,即 vector<MyClass>* my_vector;
  • 指针 vector ,即 vector<MyClass*> my_vector;
  • 指向指针 vector 的指针,即 vector<MyClass*>* my_vector;

  • 我在我的一个类中有一个具体示例,其中我目前已将 vector 声明为案例 4,即 vector<AnotherClass*>* my_vector;其中 AnotherClass 是我创建的另一个类。

    然后,在构造函数的初始化列表中,我使用 new 创建 vector :
    MyClass::MyClass()
    : my_vector(new vector<AnotherClass*>())
    {}
    

    在我的析构函数中,我执行以下操作:
    MyClass::~MyClass()
    {
      for (int i=my_vector->size(); i>0; i--)
      {
        delete my_vector->at(i-1);
      }
      delete my_vector;
    }
    

    vector 的元素添加到我的类的方法之一中。
    我无法提前知道将有多少对象添加到我的 vector 中。这是基于解析 xml 文件的代码执行时间决定的。

    这是好的做法吗?还是应该将 vector 声明为其他情况 1、2 或 3 之一?

    什么时候使用哪种情况?

    我知道如果 vector 的元素是另一个类的子类(多态性),它们应该是指针。但是在其他任何情况下都应该使用指针吗?

    非常感谢!!

    最佳答案

    通常,解决方案 1 是您想要的,因为它是 C++ 中最简单的:您不必负责管理内存,C++ 会为您完成所有工作(例如,您不需要提供任何析构函数)。

    在某些特定情况下这不起作用(最明显的是在处理多态对象时),但总的来说这是唯一的好方法。

    即使在处理多态对象或需要堆分配对象(无论出于何种原因)时,原始指针也几乎不是一个好主意。相反,使用智能指针或智能指针容器。现代 C++ 编译器提供 shared_ptr来自即将到来的 C++ 标准。如果你使用的编译器还没有,你可以使用 implementation from Boost .

    关于c++ - 指向 vector 的指针 vs 指针 vector vs 指向指针 vector 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648746/

    相关文章:

    C++ 使用继承的父类转换为对象类

    C++ - 派生类中的 "Member function not declared"

    c++ - 如何使用 std::scoped_allocator_adapter?

    大型机上的C void指针

    c++ - 如何使用 operator[] 访问结构的指定字段值

    c++ - 为什么我的插入排序函数不会更改我从 int main 传递的数组?

    c++ - 如何识别 LLVM 位码中的循环?

    c++ - 指向对象和继承对象的指针数组

    c - 如何按城镇值排序将指向城市数组的指针插入城镇数组?

    c++ - std::vector 增加峰值内存