在此代码中:
Texture * a = new Texture();
Texture * b = new Texture();
buttons.push_back(*a);
buttons.push_back(*b);
buttons
是一个定义如下的向量:std::vector<Texture> buttons;
Texture是一个类,这是它的原型:
class Texture
{
public:
Picture * texData;
HitBox * texCoords;
Texture();
~Texture();
void render_tex();
};
第一个代码块的第4行正在调用Texture a的析构函数。问题在于此析构函数将删除
texData
和texCoords
指向的值,这意味着在重新分配时,texData
和texCoords
会指向垃圾数据。有没有一种方法可以使向量在重新分配时不调用析构函数?
最佳答案
这里有一个更大的问题。由于具有析构函数,因此还需要正确实现赋值运算符并复制构造函数。然后您的代码将按原样正常工作。 Google c ++和“三法则”。如前所述,智能指针可以消除对三巨头的需求,因为它们将在后台为您处理复制和删除操作。
关于c++ - 如何在不调用析构函数的情况下使 vector 重新分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24191238/