在此代码中:

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的析构函数。问题在于此析构函数将删除texDatatexCoords指向的值,这意味着在重新分配时,texDatatexCoords会指向垃圾数据。

有没有一种方法可以使向量在重新分配时不调用析构函数?

最佳答案

这里有一个更大的问题。由于具有析构函数,因此还需要正确实现赋值运算符并复制构造函数。然后您的代码将按原样正常工作。 Google c ++和“三法则”。如前所述,智能指针可以消除对三巨头的需求,因为它们将在后台为您处理复制和删除操作。

关于c++ - 如何在不调用析构函数的情况下使 vector 重新分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24191238/

10-12 19:43