※ 引述《
Secro...@zoo.badcow.com.tw (.....)》之銘言:
: 現在我有一個Class 叫Text,主要功能是儲存文字,但它必須要有一個Coder
: 來做編碼儲存起來,Coder有很多種,因此此Text可以有很多種編碼方式,架構大
: 我想要有上述的功能,但我的問題是,當Coder的生命週期比Text的生命週
: 期短的時候要怎麼辦?
: 我目前是將Coder的指標傳進去,然後以一個指向Coder的指標儲存
: 起來,但如果傳送去的指標其生命週期比Text還短,那就會有錯誤。如
: 果Coder用new這個方式來產生,那又有另一個問題是Coder要在什麼時候被delete
: 呢?如果是在Destructor中加入delete那麼傳進去的指標如果又是存在stack中
: 那搞不好早就消失了,又delete又會產生錯誤,因為我想假設傳進去的只要
: 是個指向Coder的指標就行了。如果Call by reference的話,似乎沒有辨法
: 儲存起來。且Coder 是個abstract class
: 現在的問題在於,有沒有什麼方式可以Copy一份Coder儲存在Text中,且這個Coder
: 必須可以一直被更換,而不管之前那一個Coder到底結束了沒?
我覺得你的Coder應該做成 singleton 才對 就是不管何時何地只存在一個實體
class Coder // an interface
{
public:
//....
};
class CoderA
{
static CoderA singleton;
public:
//.....
CoderA *GetInstance(){ return &singleton; }
};
Text t;
t.setCoder(CoderA::GetInstance());
--
悠閒
--
[m [1;33;46m〒作者:cplusplus 來自:219053.D13-219.ncu.edu.tw [m
[1;36m◎二進位的世界 [37m【140.115.50.50‧binary.csie.ncu.edu.tw】