我对 C++ 还不是很有经验,所以如果这是基本的东西,请耐心等待。
我有一些像下面这样的代码。L
是一个抽象类(它有许多纯虚函数),并且A
,B
和C
都是从 . 派生的常规类L
。这些可能有任意数量,而且它们都是不同的。
int main() {
// ...
std::vector<L*> ls(3) ;
ls[0] = new A ;
ls[1] = new B ;
ls[2] = new C ;
int i ;
for (i = 0 ; i < ls.size() ; i++) {
if (ls[i]->h()) {
// ...
}
}
// ...
}
它有效,但确实必须有更好的方法来初始化该向量。对?
向量在首次初始化后不应该改变。但是,我认为我不能将其设为 const,因为各种对象本身可能会在内部发生变化。我在常规数组上选择了一个向量,因为我不想手动跟踪它的长度(这被证明容易出错)。
理想情况下,我想将向量的定义和初始化从一个单独的文件中提取出来,main
然后再放到一个单独的文件中#include
。当我尝试编译器抱怨它“在'='标记之前预期构造函数、析构函数或类型转换”时。所有类A
,B
并C
具有默认构造函数。
另外,我的印象是我必须手动delete
使用创建的任何内容new
,但它不会ls
使用delete
或删除delete[]
。如果我尝试delete ls;
编译器会抱怨“type 'class std::vector<L*, std::allocator<L*> >' argument given to 'delete', expected pointer”。
以上是安全的还是会导致一些内存问题?