對於C++來說,我很不喜歡,返回對象的最好方法是什麼?我來自腳本世界,對象總是引用,並試圖實現相同的概念...我基於此從When to pass by reference and when to pass by pointer in C++?,其中一個用戶表示:「一個很好的經驗法則:」使用引用時你可以和指針,當你不得不「。」在C++中返回對象的最佳方法?
// basic layer class
class Layer { private: Channel channel; // NEVER NULL };
// return object by pointer
Channel *Layer::getChannel() {
return &channel;
};
// return by reference
Channel& Layer::getChannel() {
return channel;
};
與第二版本的問題是,編譯器將接受該行:
Channel channel = layer.getChannel(); // creates a copy BAD
當它應該是:
Channel &channel = layer.getChannel(); // reference good
有沒有辦法強制執行的呼叫者第二個選項強制它不創建一個新的頻道,或者是第一個更好的選擇,即使它永遠不會是NULL?
「我是從腳本世界裏,對象總是引用過來,並試圖實現同樣的想法:」你爲什麼想通過周圍的一切,在C++的引用?在C++中這是不自然的。您引用的「經驗法則」可能會更好地聲明爲「儘可能使用值(和副本),否則使用引用,並且僅作爲最後手段使用指針。」 – 2011-04-24 00:31:36
考慮到您的背景,我強烈建議您瞭解**智能指針**,以便爲堆分配對象獲取自動內存管理。 – 2011-04-24 01:48:17