我的代码崩溃了,我想我需要深度复制p_Texture和sprite。 我知道如何制作指向数组的指针的深层副本,但是我不确定如何做到这一点。在这里,我写了这个析构函数:
class Sprite
{
private:
IDirect3DTexture9* p_Texture;
LPD3DXSPRITE sprite;
D3DXVECTOR3 imagepos;
int m_posX;
int m_posY;
int m_posZ;
int m_width, m_heigth;
public:
Sprite()
{
}
~Sprite()
{
if (sprite)
{
sprite->Release();
sprite = 0;
}
if (p_Texture)
{
p_Texture->Release();
p_Texture = 0;
}
}
Sprite(std::string path, int posX, int posY, int posZ, int width, int heigth)
{
m_posX = posX;
m_posY = posY;
m_posZ = posZ;
m_width = width;
m_heigth = heigth;
imagepos.x = posX;
imagepos.y = posY;
imagepos.z = posZ;
D3DXCreateTextureFromFileEx(p_Device, path.c_str(), m_width, m_heigth, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,
D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, &p_Texture)
D3DXCreateSprite(p_Device, &sprite)
}
void draw()
{
sprite->Begin(D3DXSPRITE_ALPHABLEND);
sprite->Draw(p_Texture, NULL, NULL, &imagepos, 0xFFFFFFFF);
sprite->End();
}
void incPosX(int x) {imagepos.x += x;}
void decPosX(int x) {imagepos.x -= x;}
void incPosY(int x) {imagepos.y += x;}
void decPosY(int x) {imagepos.y -= x;}
float getPosX() { return imagepos.x; }
float getPosY() { return imagepos.y; }
};
但是,由于将其复制到代码中而导致崩溃。
答案 0 :(得分:0)
复制构造函数的语法为:
Sprite::Sprite(Sprite& other)
然后,您只需将所需的内容从other
复制到this
指针。
您的代码现在具有隐式复制和移动构造函数。两者都按值复制所有内容。
崩溃的原因很可能是因为在某处进行了Sprite
的复制或移动,并且在到期时调用了析构函数。这会释放一些资源,供您以后尝试使用。
您可以通过delete
复制和移动构造函数,并查看编译器抱怨的地方找到这些位置。语法如下:
Sprite::Sprite(sprite& other) = delete; // no copy constructor
Sprite::Sprite(Sprite&& other) = delete; // no move constructor