希望这不是重复的。如果是这样,请在评论中指出我,我将再次删除该问题。
我有一个数据对象,其数据仅在捆绑包中有效 - 即在不使其他成员无效的情况下更改一个成员的值是没有意义的。
这个数据对象描述了一些图像信息:
struct ImageInfo
{
ImageInfo(const double &ppix, ...)
: PpiX(ppix),
...
{ }
const double PpiX;
const double PpiY;
const int SizeX;
const int SizeY;
};
在我的图像对象中,我有一个类型的非常量成员ImageInfo
:
class MyImageObject
{
...
private:
ImageInfo mMyInfo;
}
我希望能够mMyInfo
在运行时进行更改,但只是为了它需要一个新的 ImageInfo(...) 实例。
在MyImageObject::Load()
函数中,我想从文件信息中读取这些数据,然后ImageInfo
使用正确的数据集创建一个实例:
double ppix = ImageFile.GetPpiX();
...
mMyInfo = ImageInfo(ppix, ...);
但是我无法编写有效的赋值运算符(当然可以使用复制构造函数)。我的解决方案mMyInfo
留空,因为我没有参考this
:
ImageInfo operator=(const ImageInfo &other)
{
// no reference to *this
return ImageInfo(other);
}
出于好奇,我想知道这样一个类的赋值运算符需要是什么样子。
我正在使用普通的 C++。
编辑
可能的解决方案(目标是保持数据可传输,但连贯):
- 将私有成员与
Get...()
函数一起使用-> 简单,但我想避免使用括号。 - 存储指向 ImageInfo 的指针:(
ImageInfo *mpMyInfo;
我想避免堆。) - 使用序列化并存储序列化的 ImageInfo,然后从序列化数据创建本地实例。