我正在編寫一個模塊化的軟件,我正在解決接口和內存方面的一些問題。向下轉換const std :: list <const unique_ptr <Base>>
我有一個Base
類與關聯和組成一些繁重的工作,所以我寧願寫它在接口一次。問題是要避免任何內存泄漏或問題,只有我的基類應該能夠看到字段。除Base
之外的其他人都不應修改mFields
列表或釋放其包含的指針。
問題是BaseField
將衍生和方法將被添加和我誰將會使用Derived
方法程序應直接獲得DerivedField
名單:
class BaseField {} ;
class DerivedField : public BaseField {} ;
class Base {
protected:
unique_ptr<BaseField> & addField(unique_ptr<BaseField> f) ;
const unique_ptr<BaseField> & something() ;
const unique_ptr<BaseField> & something2() ;
const std::list<const unique_ptr<BaseField>> & getFields() ;
private:
std::list<const unique_ptr<BaseField>> mFields ;
}
class Derived : public Base {
public:
unique_ptr<DerivedField> & addField(params) ;
const unique_ptr<DerivedField> & something() ;
const unique_ptr<DerivedField> & something2() ;
const std::list<const unique_ptr<DerivedField>> & getFields() ;
}
所以我的問題是如何獲得 const std::list<const unique_ptr<DerivedField>> &
在Derived::getFields()
與Base::getFields()
?
編輯:
我想我沒有清楚地解釋我的問題。我明白了什麼是@NicolBolas說,我agreee他,但並沒有真正幫助我讓我們提出這樣的說法:
我的軟件應該解決不同的問題類型,如Problem1
Problem2
和Problem3
事實是放入系統的所有問題,具有完全相同相同的子結構,如SubProblem1
SubProblem2
SubProblem3
因此,爲了避免重複代碼,我決定寫一個BaseProblem
類和BaseSubProblems
誰將會參閱下文爲每一個問題(如addSubProblem(BaseSubProblem *)
)的結構和COMON操作。
因爲受保護的構造函數(它只是提供避免代碼重複的結構),所以基本問題不是可實現的。另外,addSubProblem(SubProblem *)
法保護的,所以只有derived
Problem
可以因爲誰創建Problem1
知道所有包含在Problem1
子問題是SubProblem1
類型,每個用戶的增加SubProblem
。
所以其實我在BaseProblem
使用std::list<SubProblem *>
和我derived Problem class
給出了std::list<SubProblem1 *> Problems1::getSubProblems()
訪問,我想能夠聲明只BaseProblem
擁有SubProbblems
即使只有derived Problems
知道真正的類型的
我希望這個解釋比以前更好。
這不是一個答案,但你應該使用'std :: list>'而不是'std :: list >''。我也想知道你爲什麼要返回'const unique_ptr &'而不是'T *'。 –
Simple
事實是,我真的不希望任何人都可以接受我的DerivedField的所有權。我100%確定所有'BaseField'都是'DerivedField'。 –