[英]Vector as a class member
你好我有这个问题:我想有一个矢量作为类成员。 这对我来说可能更容易,我为此道歉。
std::vector<int> *myVector;
或者std::vector<int> myVector
? 这个对吗?
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_ptr
或whatever_ptr
大多数时候,当我们使用标准库时,我们不需要关心内存分配/释放 。 模板将自动处理它。 例如。 std :: vector的内存将根据存储在此向量中的元素增加或减少。 这将是一个例子 。
因此,几乎你可以在你的情况下以这种方式使用它。
std::vector<int> myVector //your second declaration
if(myCondition)
{
myVector.push(some_int); // use it directly
}
当您创建的Class对象被销毁时,将使用释放的向量内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.