我有一个小问题,我不确定这是编译器错误还是我的愚蠢。
我有这个结构:
struct BulletFXData
{
int time_next_fx_counter;
int next_fx_steps;
Particle particles[2];//this is the interesting one
ParticleManager::ParticleId particle_id[2];
};
成员“ Particle particle [2]”中具有一种自制的smart-ptr(资源计数纹理类)。此智能指针具有默认构造函数,该构造函数将ptr初始化为0(但这并不重要)
我还有另一个结构,包含BulletFXData结构:
struct BulletFX
{
BulletFXData data;
BulletFXRenderFunPtr render_fun_ptr;
BulletFXUpdateFunPtr update_fun_ptr;
BulletFXExplosionFunPtr explode_fun_ptr;
BulletFXLifetimeOverFunPtr lifetime_over_fun_ptr;
BulletFX( BulletFXData data,
BulletFXRenderFunPtr render_fun_ptr,
BulletFXUpdateFunPtr update_fun_ptr,
BulletFXExplosionFunPtr explode_fun_ptr,
BulletFXLifetimeOverFunPtr lifetime_over_fun_ptr)
:data(data),
render_fun_ptr(render_fun_ptr),
update_fun_ptr(update_fun_ptr),
explode_fun_ptr(explode_fun_ptr),
lifetime_over_fun_ptr(lifetime_over_fun_ptr)
{
}
/*
//USER DEFINED copy-ctor. if it's defined things go crazy
BulletFX(const BulletFX& rhs)
:data(data),//this line of code seems to do a plain memory-copy without calling the right ctors
render_fun_ptr(render_fun_ptr),
update_fun_ptr(update_fun_ptr),
explode_fun_ptr(explode_fun_ptr),
lifetime_over_fun_ptr(lifetime_over_fun_ptr)
{
}
*/
};
如果我使用用户定义的copy-ctor,我的智能指针类会发疯,并且似乎未按应有的方式调用CopyCtor /赋值运算符。
那么-这一切有意义吗?看来我自己的struct BulletFX结构的copy-ctor应该完全执行编译器生成的操作,但是似乎忘记了在链中调用正确的构造函数。
编译器错误?我很傻吗?
很抱歉大代码,也有一些小例子可以说明。但是你们经常要求提供真正的代码,很好-这是:D
编辑:更多信息:
typedef ParticleId unsigned int;
粒子没有用户定义的copyctor,但是具有类型的成员:
Particle
{
....
Resource<Texture> tex_res;
...
}
资源是一个智能指针类,并且具有所有ctor的定义(也是赋值运算符)
并且似乎资源按位复制。
编辑:
henrik解决了它……data(data)当然是愚蠢的!当然应该是rhs.data !!!
对不起,我的代码量很大,但里面有一个很小的错误!
(猜想您不应该在凌晨1点编码:D)
最佳答案
:data(data)
这是有问题的。这是因为您的
BulletFXData
结构没有它自己的copy-ctor。您需要定义一个。关于c++ - 用户定义的Copy ctor,而copy-ctors在链的更下游-编译器错误?程序员脑力激荡?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2399934/