您好我有这个问题: 我想有一个矢量作为类成员。这可能是我的问题 对你来说更容易,我为此道歉。
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
}
答案 0 :(得分:7)
您当然希望使用std::vector<int> myVector
。无需初始化它,因为它会在类的构造函数中自动初始化,并在类被销毁时释放。
答案 1 :(得分:6)
只需使用自动分配:将其声明为如下所示的成员:
class YourClass
{
std::vector<int> myVector;
// ...
};
在运行任何构造函数之前自动构造数组,并在释放对象时自动销毁数组,您不需要关心它(默认的复制构造函数和赋值运算符将自动处理正常复制)
相反,如果您只想在特定条件之后创建数组,则必须使用(智能)指针和动态分配,但恕我直言,这非常麻烦(特别是因为你必须得到正确的“大”三个“ - 复制构造函数,赋值运算符,析构函数);您可以简单地使用自动分配分配向量,并使用单独的标记将数组标记为未初始化,或者只检查其大小是否为0.
答案 2 :(得分:0)
这完全取决于上下文 - 矢量的含义以及您需要它的原因。它应该在多个对象之间共享吗?如果您不知道,请不要使用指针,请使用第二个选项。
std::vector<int> myVector;
如果您有充分理由拥有指针,请使用智能指针,即为您的情况提供最合适所有权的指针 - shared_ptr
,scoped_ptr
,unique_ptr
或{ {1}}
答案 3 :(得分:0)
大多数情况下,当我们使用标准库时,我们不需要关心内存分配/释放。模板将自动处理它。例如。 std :: vector的内存将根据存储在此向量中的元素增加或减少。这将是example。
因此,几乎你可以在你的情况下以这种方式使用它。
std::vector<int> myVector //your second declaration
if(myCondition)
{
myVector.push(some_int); // use it directly
}
当您创建的Class对象被销毁时,将释放向量使用的内存。