在我们公司的编码标准中,我们被告知"要知道可以防止复制的方式(意外)".
我不确定这意味着什么,但假设它们意味着如果不需要,我们应该停止复制类.
我能想到的是:
我是在正确的轨道上吗?有什么我可能错过的吗?
Iva*_*sky 21
是的,将赋值运算符和复制构造函数设置为私有将阻止您使用标准方法创建任何对象副本(但如果您确实需要可以实现的对象的副本,例如,将执行深层复制的Copy()方法) .
更新(重新访问Tal Pressman):
......你应该知道这些事情并注意你不要意外地复制你不应该的东西.
好吧,我认为,任何意外的副本都将使用赋值运算符或复制构造函数执行.因此,将它们设为私有实际上是有道理的:如果对象复制是昂贵的操作,那么复制必须是明确的:其他开发人员可以无意间接调用复制操作,编译器将通知他,这是禁止的.
Jor*_*ans 11
如果您的编码标准声明"要知道可以防止复制的方式(意外)",我猜他们不只是在讨论防止类本身内的副本,而是关于不必要/意外副本的性能影响.使用类.
在C++新手的代码中不必要地浪费性能的一个主要原因是不必要的复制,通常是通过临时工具.编写器在决定何时不需要临时工具时越来越好(参见"想要速度?通过价值",感谢Konrad的评论),但最好的办法是学会了解复制和临时工作的内部工作原理在C++中(以及其他).对我来说,阅读Efficient C++真的让我开始了.
Dan*_*eer 10
如果您正在使用boost,那么阻止类被复制的最简单方法是从noncopyable派生您的类:
#include <boost/noncopyable.hpp>
class Foo : private boost::noncopyable
{
}
Run Code Online (Sandbox Code Playgroud)
它使您的意图比手动使复制构造函数和分配运算符私有更清晰,并且它具有相同的结果.
| 归档时间: |
|
| 查看次数: |
8387 次 |
| 最近记录: |