Re: [問題] 開function給別人用遇到的問題
※ 引述《pracinverse (改)》之銘言:
: MethodA在function裡面new,需要告知使用者記得要delete,
: MethodB須告知使用者呼叫之前要先new,
: 因為在使用者這邊new,使用者自己知道需要做delete,
: MethodA和MethodB的做法都有看過,哪種方式比較好呢???
都不好
直接回傳 std::string 是最好用的介面
呼叫端既不需要事先配置空間
也不需要手動釋放記憶體
: Q2. 當你開出一系列的function給別人呼叫,但這些function需要按照一定的順序呼叫,
: 比方說順序為: EnumerateObj() --> CreateObj --> UseObj() ...
: 如果使用者不按這個順序呼叫可能會crash,但你又沒辦法預期使用者不會亂呼叫,
: 你該怎麼預防crash呢????
: 我目前想到的是在自己的程式這邊紀錄state,比方說:
: void UseObj()
: {
: if(currentState != READY_TO_USE) {
: return -1;
: }
: ...
: }
: 在每個function裡面的一開始,都先檢查目前的state是否可以呼叫這個function,
: 但又覺得這樣做有點麻煩,不知道有沒有更好的做法????
EnumerateObj → CreateObj → CreateObj → UseObj → UseObj
這樣合法嗎?
如果說 EnumerateObj 後面一定接一個 CreateObj 然後又固定接一個 UseObj
那麼直覺地想就是包成一個大的 function
如果是依照 EnumerateObj 的結果可以 CreateObj 很多次
然後對每個 object 呼叫 UseObj
你可以把 CreateObj 這個操作綁在 EnumerateObj 的回傳值上
class EnumerateResult {
public:
Object CreateObj();
};
EnumerateResult EnumerateObj()
{
// ...
return EnumerateResult;
}
這麼一來,你可以確保使用者呼叫過 EnumerateObj 後才能呼叫 CreateObj
同樣地把 UseObj 綁在 CreateObj 的回傳值上
這樣一來一定要呼叫 CreateObj 後才能呼叫 UseObj
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.77.128
→
03/04 13:55, , 1F
03/04 13:55, 1F
→
03/04 13:58, , 2F
03/04 13:58, 2F
→
03/04 14:06, , 3F
03/04 14:06, 3F
→
03/04 14:17, , 4F
03/04 14:17, 4F
推
03/05 15:52, , 5F
03/05 15:52, 5F
→
03/05 17:15, , 6F
03/05 17:15, 6F
→
03/05 17:23, , 7F
03/05 17:23, 7F
推
03/05 22:25, , 8F
03/05 22:25, 8F
→
03/05 22:25, , 9F
03/05 22:25, 9F
推
03/06 10:17, , 10F
03/06 10:17, 10F
→
03/06 12:24, , 11F
03/06 12:24, 11F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):