我有一組類: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