Vector作为类成员

Vector as a class member

本文关键字:成员 Vector      更新时间:2023-10-16

你好,我有一个问题:我想要一个向量作为类的成员。这也许是我的问题对你来说更容易了,我为此道歉。

  • 我应该如何声明向量?这是正确的吗?std::vector<int> *myVector;还是std::vector<int> myVector ?
  • 我应该如何处理这个矢量在dealloc?
  • 如何将数组初始化为if?

正确吗?

if(myCondition)
{
   if(!myVector) //is this correct?
       myVector = new std::vector<int>(); //is this correct? on this i have a error
}

您肯定想使用std::vector<int> myVector。不需要初始化它,因为它会在类的构造函数中自动初始化,并在类销毁时释放。

直接使用自动分配:像这样声明它为成员:

class YourClass
{
    std::vector<int> myVector;
    // ...
};

数组在运行任何构造函数之前自动构造,在对象被释放时自动销毁,您不需要关心它(而且,默认的复制构造函数和赋值操作符将自动优雅地处理复制)。

相反,如果你想只在特定条件之后创建数组,你必须求助于(智能)指针和动态分配,但我认为这相当麻烦(特别是因为你必须正确处理"三大"-复制构造函数,赋值操作符,析构函数);相反,您可以简单地使用自动分配方式分配向量,并使用单独的标志将数组标记为未初始化,或者仅检查其大小是否为0。

这完全取决于上下文——向量意味着什么以及为什么需要它。它应该在多个对象之间共享吗?如果你不知道,就不要用指针,用你的第二个选择。

std::vector<int> myVector;

如果你有强烈的理由使用指针,那么请使用智能指针,为你的情况提供最合适的所有权- shared_ptr, scoped_ptr, unique_ptrwhatever_ptr

大多数情况下,当我们使用标准库时,我们不需要关心内存分配/释放。模板将自动处理它。如。std::vector的内存将根据vector中存储的元素数量增加或减少。这是一个例子。

因此,在你的情况下,你几乎可以这样使用它。

std::vector<int> myVector  //your second declaration
if(myCondition)
{
   myVector.push(some_int);  // use it directly
}

当您创建的Class对象被销毁时,vector所使用的内存将被释放。