我有一组类:Value,ReportItem,ReportMessage。值类是抽象的与多个不同的具体实施方式(例如INTVALUE,的floatValue,的doubleValue等)的具体的类被添加到当它被传递一个参考值产生的ReportItem的:您能否从抽象参考创建具体对象的副本
ReportItem(Value& value);
然后ReportItems添加使用“的addItem”方法的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。
只是让'ReportItem'自己的价值,并通过基类指针处理它。 –
将它作为一个指针可以处理[clone pattern](http://en.wikipedia.org/wiki/Prototype_pattern)的复制。 – BartoszKP