当涉及到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;
};
Run Code Online (Sandbox Code Playgroud)
第二个版本的问题是编译器将接受这一行:
Channel channel = layer.getChannel(); // creates a copy BAD
Run Code Online (Sandbox Code Playgroud)
应该是什么时候:
Channel &channel = layer.getChannel(); // reference good
Run Code Online (Sandbox Code Playgroud)
有没有办法强制第二个选项的调用者强制它不创建新的通道,或者是第一个选择更好,即使它永远不会是NULL?
jal*_*alf 11
您需要调整Channel类本身,使其不可复制.如果它是可复制的,则用户可以复制它,而您所做的任何事情都无法阻止它.
如果复制不是一个有意义的操作,那么你可以"禁用"它.只需将复制构造函数(Channel(const Channel&))和赋值运算符(Channel& operator=(const Channel&))定义为私有.然后,任何复制该类的尝试都将导致编译错误.
另外,正如其他人所提到的,C++并不是您熟悉的脚本语言.一切都不是一个参考,你只是通过假装来为自己创造一个痛苦的世界.在C++中,通常在堆栈上分配对象,并按值传递对象,而不是传递引用和指针.
| 归档时间: |
|
| 查看次数: |
2218 次 |
| 最近记录: |