【发布时间】:2014-08-03 04:22:02
【问题描述】:
在这段代码中:
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 行正在调用纹理 a 的析构函数。问题是这个析构函数删除了texData和texCoords指向的值,这意味着当它被重新分配时texData和texCoords指向垃圾数据。
有没有办法让向量在重新分配时不会调用析构函数?
【问题讨论】:
-
这似乎是一个 XY 问题。修复你的类会更好,这样它就可以与向量一起使用,否则不要将它与向量一起使用。
-
您需要为您的
Texture类定义一个noexcept移动构造函数。见stackoverflow.com/questions/8001823/…。 -
也定义一个拷贝构造函数和赋值运算符。关注The Rule of Three。
-
为什么析构函数会删除
textData和texCoords?如果对象拥有数据,为什么不是直接数据成员?
标签: c++ class c++11 vector destructor