想知道在 C++ 中关于向量的最佳实践是什么。
如果我有一个包含矢量成员变量的类。那么这个向量应该何时声明为:
- 包含值的“整个对象”向量成员变量,即
vector<MyClass> my_vector;
- 指向向量的指针,即
vector<MyClass>* my_vector;
- 指向指针的向量,即
vector<MyClass*> my_vector;
- 指向指针向量的指针,即
vector<MyClass*>* my_vector;
我有一个具体的例子,在我的一个类中,我当前将向量声明为情况 4,即 vector<AnotherClass*>* my_vector;
,其中 AnotherClass 是我创建的另一个类之一。
然后,在构造函数的初始化列表中,我使用 new 创建了这个向量:
MyClass::MyClass()
: my_vector(new vector<AnotherClass*>())
{}
在我的析构函数中,我执行以下操作:
MyClass::~MyClass()
{
for (int i=my_vector->size(); i>0; i--)
{
delete my_vector->at(i-1);
}
delete my_vector;
}
我的类的某个方法中,向量的元素被添加。我无法提前知道有多少对象将被添加到我的向量中。这是在代码执行时基于解析 xml 文件时决定的。
这种做法好吗?或者应该将向量声明为其他情况之一:1、2 或 3?
什么情况下使用哪种情况?
我知道如果向量元素是另一个类的子类(多态),则应该使用指针作为向量元素。但是,在其他情况下应该使用指针吗?
非常感谢!!
Boost.Pointer Container
或Boost.Reference
。 - Björn Pollexvector<MyClass>* my_vector;
,但我刚刚注意到你是在谈论传统的那个,没有任何指针的东西。我的错。 - Everyone