矢量作为班级成员

时间:2011-12-18 17:36:35

标签: c++ vector dealloc aggregation

您好我有这个问题: 我想有一个矢量作为类成员。这可能是我的问题 对你来说更容易,我为此道歉。

  • 我该如何申报这个载体?这是对的吗? 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
}

4 个答案:

答案 0 :(得分:7)

您当然希望使用std::vector<int> myVector。无需初始化它,因为它会在类的构造函数中自动初始化,并在类被销毁时释放。

答案 1 :(得分:6)

只需使用自动分配:将其声明为如下所示的成员:

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

在运行任何构造函数之前自动构造数组,并在释放对象时自动销毁数组,您不需要关心它(默认的复制构造函数和赋值运算符将自动处理正常复制)

相反,如果您只想在特定条件之后创建数组,则必须使用(智能)指针和动态分配,但恕我直言,这非常麻烦(特别是因为你必须得到正确的“大”三个“ - 复制构造函数,赋值运算符,析构函数);您可以简单地使用自动分配分配向量,并使用单独的标记将数组标记为未初始化,或者只检查其大小是否为0.

答案 2 :(得分:0)

这完全取决于上下文 - 矢量的含义以及您需要它的原因。它应该在多个对象之间共享吗?如果您不知道,请不要使用指针,请使用第二个选项。

std::vector<int> myVector;

如果您有充分理由拥有指针,请使用智能指针,即为您的情况提供最合适所有权的指针 - shared_ptrscoped_ptrunique_ptr或{ {1}}

答案 3 :(得分:0)

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

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

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

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