gpt4 book ai didi

c++ - 用户定义的 Copy ctor 和链下的 copy-ctors - 编译器错误?程序员脑残?

转载 作者:太空宇宙 更新时间:2023-11-04 14:27:48 25 4
gpt4 key购买 nike

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

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 particles[2]”中有一个自制的智能指针(资源计数纹理类)。这个智能指针有一个默认构造函数,将 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 复制函数应该完全按照编译器生成的方式执行,但它似乎忘记了在链中调用正确的构造函数。编译器错误?我是傻吗?

对不起,大代码,一些小例子也可以说明。但你们经常要求真正的代码,很好 - 就在这里 :D

编辑:更多信息:

typedef ParticleId unsigned int; 

粒子没有用户定义的复制器,但有一个类型的成员:

Particle
{
....
Resource<Texture> tex_res;
...
}

Resource 是一个智能指针类,并且定义了所有构造函数(也是赋值运算符)并且 Resource 似乎是按位复制的。

编辑:
henrik 解决了它...数据(数据)当然是愚蠢的!它当然应该是 rhs.data !!!
抱歉,代码量很大,其中有一个小错误!!!
(我猜你不应该在凌晨 1 点编码 :D )

最佳答案

:data(data)

这是有问题的。这是因为您的 BulletFXData 结构没有自己的复制构造函数。您需要定义一个。

关于c++ - 用户定义的 Copy ctor 和链下的 copy-ctors - 编译器错误?程序员脑残?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com