含非静态常量数据成员的类的赋值运算符重载
时间:2008-05-29 15:36:44
来源:论坛整理 作者: 编辑:chinaitzhe
Class Sth{
public:
const int posX, posY;
//..............................
Sth(const int pX, const int pY): posX(pX), posY(pY){
//...............................
}
Sth(const Sth& ref): posX(ref.posX), posY(ref.posY){
//...............................
}
Sth& operator=(const Sth& ref){
//这里该怎么办?直接赋值是铁定不行的,能利用拷贝构造器来实现吗?
}
//..................................
}
网友回复:memcpy((void*)&posX, &ref.posX, sizeof(int))
网友回复:常量对类得每个类不一样?假如一样自然不需要考虑他们
网友回复:假如每个实例都不一样,设置成常量不是很合适,至少要mutable
网友回复:是常量了怎么赋值?
网友回复:主要是希望保证在实例的生命周期里这些值都是不变的。假如不用常量有别的办法吗?
网友回复:Oh yeah! 用Placement new配合拷贝构造器搞定了!
Sth& operator=(const Sth& ref){
this->~Sth();
return *(new(this) Sth(ref));
}
另,实测中发现传说的Placement new产生的对象不会自动调用析构器现象没有发生,不管是在堆上还是在栈上,都会在delete或是离开生存域时自动调用析构器。
网友回复:忘了说了,编译器是 GCC 4.2.11
为什么不能改自己的帖?郁闷…………
关键字:静态,常量,数据,成员,赋值,
上一篇:什么是有序数据类型?
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面