我有一个小问题,我不确定这是编译器错误还是我的愚蠢。
我有这个结构:

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/

10-10 12:39