gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:12:58 30 4
gpt4 key购买 nike

只是想知道您认为关于 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/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com