在这里,类似的问题已经被问过很多次了,但是答案并不能解决我的问题。
假设我有:
1)两个类(ACLass和BClass)
2)AClass有一个构造函数和一个析构函数
3)BClass有一个std :: vector成员,用于存储AClass的对象
4)该向量中的元素数事先未知
5)每当调用BClass方法generateObject()时,向量都会随着创建新的AClass对象而扩展。这是通过调用std :: vector.push_back()完成的。
class AClass {
AClass() { //Constructor }
~AClass() { //Destructor }
};
Class BClass {
std::vector<AClass> object;
void generateObject() {
object.push_back(AClass());
}
};
现在,在上面的示例中,generateObject()将仅工作几次。一旦向量变得太小而无法容纳所有对象,它将执行各种内部操作,以便保留更多的内存以进行扩展。问题是在此过程中会调用某些(如果不是全部)AClass析构函数。
由于元素的数量是未知的,因此不能通过使用reserve()为向量保留更多空间。使用emplace_back()也无法解决我的问题。
那么我该怎么做呢?有没有办法防止析构函数被调用?在这种情况下使用std :: vector绝对是个好主意吗?
当std::vector
扩展其存储时,它将当前对象复制或移动到新的存储空间中。旧对象被丢弃,这必然涉及在旧对象上调用析构函数。
如果不希望销毁旧对象,请执行与或多或少std::deque
相同的操作std::vector
,但会增加一些开销,而不必重新分配存储。
如果内存使用没有问题,则std::list
不要移动其存储的对象,但是列表中的每个元素还具有一对指针,一个指针指向列表中的上一个元素,另一个指向下一个元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句