作为类成员的向量

10

你好,我有一个问题:我想把一个向量作为类成员。这也许会让问题更容易理解,对此我感到抱歉。

  • 我该如何声明这个向量?哪种方式是正确的: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个回答

10

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


9

只需使用自动分配:像这样将其声明为成员:

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

数组会在您的任何构造函数运行之前自动构建,并在您的对象被销毁时自动销毁,您不需要担心它(此外,默认的复制构造函数和赋值运算符将自动优雅地处理复制)。

如果您希望仅在特定条件下创建数组,则必须使用(智能)指针和动态分配,但我认为这相当麻烦(尤其是因为您随后必须正确处理“大三”- 复制构造函数、赋值运算符和析构函数);相反,您可以使用自动分配来分配向量,并使用单独的标志将数组标记为未初始化,或者只需检查其大小是否为0。


1

这完全取决于上下文——向量的意义以及为什么需要它。它应该在多个对象之间共享吗?如果您不确定,请不要保留指针,选择第二个选项。

std::vector<int> myVector;

如果您有使用指针的充分理由,请使用智能指针,选择最适合您情况的所有权类型 - shared_ptrscoped_ptrunique_ptrwhatever_ptr

0
大多数情况下,当我们使用标准库时,我们不需要关心内存的分配和释放。模板会自动处理它。例如,std::vector的内存将根据存储在该向量中的元素而增加或减少。这将是一个示例
因此,在您的情况下,几乎可以以这种方式使用它。
std::vector<int> myVector  //your second declaration
if(myCondition)
{
   myVector.push(some_int);  // use it directly
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接