【发布时间】:2011-04-24 00:30:21
【问题描述】:
我对 c++ 很陌生,返回对象的更好方法是什么?我来自对象始终是引用的脚本世界,并且正在尝试实现相同的概念......我基于When to pass by reference and when to pass by pointer in 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++ 中这样做是不自然的。您引用的“经验法则”可能会更好地表述为“尽可能使用值(和副本),否则使用引用,并且仅作为最后的手段使用指针。”
-
考虑到您的背景,我强烈建议您了解智能指针,以便获得堆分配对象的自动内存管理。
标签: c++