我有一组类:Value、ReportItem、ReportMessage。Value 类是抽象的,具有许多不同的具体实现(例如 IntValue、FloatValue、DoubleValue 等)。具体类在通过传递对值的引用创建 ReportItem 时被添加到:
ReportItem(Value& value);
然后使用“addItem”方法为 ReportItems 添加一个 ReportMessage,该方法获取报告项目的副本并将其隐藏:
class ReportMessage {
...
void addItem(ReportItem item);
}
因此,代码片段可能如下所示:
IntValue value(1);
ReportItem item(value);
ReportMessage message;
message.addItem(item);
创建 ReportItem 的副本没有问题,但 Value 有问题,因为它是一个抽象类。创建 ReportItem 时,它会引用 Value 对象并保留该引用,直到 ReportItem 被删除。这是一个问题,因为如果在 ReportItem 完成之前删除 Value 对象,地球将偏离其轴并螺旋进入太阳。
有没有解决这个问题的好方法?我想要的是一种引用值对象(Value&)的方法,并以某种方式创建具体对象的副本,然后由报表项保存。这是可能的,还是有更好的方法。
谢谢。
注意:我没有使用 C++11。