c – 我是否违反了三条规则?
我最近读过,Rule of three,我想知道我是否违反了它?
在我的GUI应用程序中,MainFrame,Interface,Circuit,Breadboard等类(类名称是指示性的)具有每个类的单个实例.在他们的构造函数中,我已经分配了一些资源(内存),我在析构函数中安全地释放了这些资源. 所以我只定义了析构函数,但没有定义复制构造函数和赋值运算符. 我确信我不需要它们,但我很好奇我是否违反了规则,我可以/应该做些什么来遵循它? 解决方法
三个规则是关于处理所有三巨头,但这并不一定意味着如果你不愿意,你将不得不定义它们.要么你提供它们要么禁止它们.你不应该做的就是忽略它们.
是的,你违反了规则.编译器将生成一个复制构造函数和复制赋值运算符,并且由于您在构造函数中分配内存并在析构函数中释放,因此这些副本将具有错误的语义:它们将复制指针,并且您将有两个类别于同一内存.赋值甚至不会释放旧内存,只是覆盖指针.
如果像你暗示的那样,你没有复制或分配这些类的实例,那么什么都不会出错.但是,最好是安全起见并声明(甚至不要定义)复制构造函数和复制赋值运算符private,因此不要意外调用它们. 在C 11中,您可以使用= delete语法: T(T const&) = delete; // no copy constructor T& operator=(T const&) = delete; // no copy assignment (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 010Editor 5.0.2 附注册机 附elf,dex,xml文件格式分析模板
- 我们在C中有没有我们在java中的设计模式?
- ruby-on-rails-3 – 将rails从3.1.1升级到3.1.3后,参数数量
- 【正则表达式系列】贪婪与非贪婪模式
- 【原创IOS开发】swift使用SDWebImages
- 使用React Native在其他方面调用一个javascript
- objective-c – 使用setReturnValue从NSInvocation返回NSSt
- ruby-on-rails – 下划线’下划线’是正确的Rails变形吗?
- VB打开工程名称冲突解决方法
- swift的枚举为何让这位外国程序员感到沮丧?