`
kuwoleft
  • 浏览: 1074820 次
文章分类
社区版块
存档分类
最新评论

若不想使用编译器自动生成的函数,就应该明确拒绝

 
阅读更多

明确拒绝的方法:

<!--[if !supportLists]-->1、 <!--[endif]-->copy构造函数和copy assignment函数声明为private

<!--[if !supportLists]-->2、 <!--[endif]-->上面的方法不是一个完全方案:因为类的members成员函数和friends函数还可以访问。一点改进就是指声明而不定义他们,这样有地方使用它们的时候,就会产生连接告警。

<!--[if !supportLists]-->3、 <!--[endif]-->声明一个baseclass,并且将其copy构造函数和copy assignment操作符指定为private。但是这种方法会增加继承层数。我不是很认同。

注意:

为驳回编译器自动(暗自)提供的功能,可以将相应的成员函数声明为private,并且不予实现。使用像Uncopyable这样的baseclass也是一种方法。

分享到:
评论

相关推荐

    Effective C++条款06:构造/析构/赋值运算之(若不想使用编译器自动生成的函数,就该明确拒绝)

    一、前言 在前面一篇文章中(https://blog.csdn.net/qq_41453285/article/details/104165762),我们介绍了C++编译器...如果我们不想使用某些函数,将这些不想使用的函数在类中声明为private,那么就不能使用这些函数了

    浅谈C++ Explicit Constructors(显式构造函数)

    C++ 为类(Class)提供了许多默认函数。如果自己没有申明,编译器会为我们提供一个copy构造函数、一个copy assignment操作符和一个析构...就像Effective C++说的,如果不想使用编译器自动生成的函数,就应该明确拒绝。 1

    Effective C++之2.构造析构赋值运算

    条款06:如不想使用编译器自动生成的函数,就应该明确拒绝 为了驳回编译器暗自提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class 也是一种做法。不过C++11开始,可以用...

    EffectiveCPlusPlus

    若不想使用编译器自动生成的函数,就该明确拒绝 多态基类声明virtual析构函数 别让异常逃离析构构函数 不在构造析构过程中调用virtual函数 operator =返回对* this的引用 在operator =中处理自我赋值 复制对象时勿忘...

    MingW VC 之.a .lib .dll .def 关系

    如果想生成__stdcall的函数,我们可以使用/GZ编译.例如: cl /Gz /LD mylib.cpp 这样生成的dll和lib就是使用的__stdcall约定 通过下面的命令 dumpbin /exports mylib.dll 或mylib.lib 我们可以看到 ordinal ...

    c编译器,将C语言编译成masm32汇编语言

    p.c生成语法树,table.c是符号表,g.c是转化成具体masm32代码,只支持char,short,int,double四种类型数据,其他的有兴趣的可以自己修改增加,由于masm32限制,目前该编译器只支持局部变量在函数开头定义,全局变量不...

    rust使用的自定义哈希算法(加上 hashmap/set 别名):快速、确定性_rust_代码_下载

    在编译器中,我们并不真正担心 DOS 尝试,因此我们使用快速非加密哈希。 这与 Firefox 使用的算法相同——它是一种不基于任何广为人知的算法的自制算法——尽管经过修改以生成 64 位散列值而不是 32 位散列值。它...

    Sysy2020-llvm-compiler:使用LLVM框架的kaleidoscope语言编译器

    系统使用LLVM框架的Sysy2020语言编译器LLVM框架语言:LLVM 12.0.0编译环境:cmake 3.13 + Deepin 20.1 Beta编译时若出错请注意LLVM版本号目前支持程度函数定义参数二元表达式&&,|| +,-,*,/,%,!=函数调用传参...

    Effective C++(第三版)

    条款06:若不想使用编译器自动生成的函数,就该明确拒绝 explicitly disallow the use of compiler-generated functions you do not want. 条款07:为多态基类声明virtual析构函数 declare destructors virtual in ...

    新手学习C++入门资料

    上面例子中,第一次调用show()函数时,让编译器自动提供函数原型中指定的所有默认参数,第二次调用提供了第一个参数,而让编译器提供剩下的两个,第三次调用则提供了前面两个参数,编译器只需提供最后一个,最后一...

    Newton-method:C 中的牛顿方法,使用算术表达式编译器和虚拟机

    用 C 实现的牛顿方法 这个程序是牛顿法的一个实现,... makefile 是为 clang 编译器编写的,如果你想使用不同的编译器,你必须重新分配CC变量: make release CC=gcc 要清理构建目录,请使用 clean 目标: make cle

    你必须知道的495个C语言问题

    3.12 我不想学习那些复杂的规则,怎样才能避免这些未定义的求值顺序问题呢? 其他的表达式问题 *3.13 ++i和i++有什么区别? 3.14 如果我不使用表达式的值,那我应该用i++还是++i来做自增呢? 3.15 我要检查...

    《你必须知道的495个C语言问题》

    3.12 我不想学习那些复杂的规则,怎样才能避免这些未定义的求值顺序问题呢? 38 其他的表达式问题 39 *3.13 ++i和i++有什么区别? 39 3.14 如果我不使用表达式的值,那我应该用i++还是++i来做自增呢? 39 ...

    C语言FAQ 常见问题列表

    o 6.6 如果 NULL 定义成 #define NULL ((char *)0) 难道不就可以向函数传入不加转换的 NULL 了吗? o 6.7 如果 NULL 和 0 作为空指针常数是等价的, 那我到底该用哪一个呢? o 6.8 但是如果 NULL 的值改变了, 比如...

    VC++6.0核心编程源码.rar

    表1-1列出了大多数Windows函数使用的数据类型的返回值。 表1-1 Windows函数常用的返回值类型 数据类型 表示失败的值 VOID 该函数的运行不可能失败。Windows函数的返回值类型很少 是VOID。 BOLL 如果函数运行...

    跟我一起写makefile

    对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标...

    Effective.C++.中文第二版.50条款doc文档.chm

    条款27: 如果不想使用隐式生成的函数就要显式地禁止它 条款28: 划分全局名字空间 第五章 类和函数: 实现 条款29: 避免返回内部数据的句柄 条款30: 避免这样的成员函数:其返回值是指向成员的非const指针或引用,但...

    小型的pascal解释器

    就可以看到右边的Tab页中看到编译后的结果,其中变量页包含了源程序中声明的变量,常量页包含了源程序中的常量一般是数字常量,方法页中包含了代码中声明的过程和函数,而P-Code页是对源程序编译后生成的伪代码。...

Global site tag (gtag.js) - Google Analytics