【问题标题】:Vector as a class memberVector作为类成员
【发布时间】:2012-01-23 02:51:14
【问题描述】:
您好,我有一个问题:
我想有一个向量作为类成员。这也许是我的问题
对你来说更容易,对此我深表歉意。
- 我应该如何声明向量?这是正确的吗?
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
}
【问题讨论】:
标签:
c++
vector
dealloc
aggregation
【解决方案1】:
您肯定想使用std::vector<int> myVector。不需要初始化它,因为它会在你的类的构造函数中自动初始化,并在你的类被销毁时释放。
【解决方案2】:
只需使用自动分配:将其声明为这样的成员:
class YourClass
{
std::vector<int> myVector;
// ...
};
数组在你的任何构造函数运行之前自动构造,并在你的对象被释放时自动销毁,你不需要关心它(另外,默认的复制构造函数和赋值运算符将自动优雅地处理复制) .
相反,如果您只想在特定条件后创建数组,则必须求助于(智能)指针和动态分配,但恕我直言,这非常麻烦(尤其是因为您必须正确处理“大三” - 复制构造函数、赋值运算符、析构函数);您可以改为简单地使用自动分配来分配向量并使用单独的标志将您的数组标记为未初始化,或者只检查其大小是否为 0。
【解决方案3】:
这完全取决于上下文 - 向量的含义以及您需要它的原因。它应该在多个对象之间共享吗?如果您不知道,请不要保留指针,请选择第二个选项。
std::vector<int> myVector;
如果您有充分的理由拥有指针,那么请使用智能指针,它可以为您的情况提供最合适的所有权 - shared_ptr、scoped_ptr、unique_ptr 或 whatever_ptr
【解决方案4】:
大多数时候,当我们使用标准库时,我们不需要关心内存分配/释放。模板会自动处理它。例如。 std::vector 的内存将根据存储在此向量中的元素增加或减少。这将是一个example。
因此,您的情况几乎可以这样使用它。
std::vector<int> myVector //your second declaration
if(myCondition)
{
myVector.push(some_int); // use it directly
}
当你创建的 Class 对象被销毁时,向量使用的内存将被释放。