禁止拷贝构造,禁止bug( 二 )
发现运行的直接崩溃了~
就我们获取下core文件 , 然后看下堆栈信息:
root@iZuf67on1pthsuih96udyfZ:~/GDB/20201014# gdb a.out core (gdb) bt#00x00007ffff74aa428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54#10x00007ffff74ac02a in __GI_abort () at abort.c:89#20x00007ffff74ec7ea in __libc_message (do_abort=do_abort@entry=2, fmt=fmt@entry=0x7ffff7605ed8 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175#30x00007ffff74f537a in malloc_printerr (ar_ptr=从堆栈信息大致可以得出 , 我们程序出现异常的是在23行 , 并且在析构的时候发生了异常;
所以得出结论:
不是所有的默认拷贝构造函数都是安全的 , 在我们不需要拷贝构造函数的时候 , 我们可以把默认拷贝构造函数禁止使用 , 这样就不会出现因为默认拷贝构造函数导致难以寻找的BUG!!!
四、如何禁止拷贝构造函数禁止拷贝构造构造函数有两种方式 , 一般我们使用第一种 , 是最简单的 , 也是C++11的新特性~
- 使用delete关键字 我们可以直接使用delete关键字进行禁止默认拷贝构造函数 public: Epoll( const Epoll --tt-darkmode-color: #A626A4;">delete;
- 使用NonCopyable 基类 class NonCopyable {protected: NonCopyable(const NonCopyable --tt-darkmode-color: #A626A4;">delete; NonCopyable --tt-darkmode-color: #A626A4;">operator=(const NonCopyable --tt-darkmode-color: #A626A4;">delete; NonCopyable() = default; ~NonCopyable() = default;}; 我们可以使用: class A : public NonCopyable {};
禁止默认拷贝构造 , 禁止BUG!
往期精彩汇总GDB 多线程之旅
肝!动态规划
C++使用锁注意事项
呕心沥血的递归
muduo源码剖析学习总结
【禁止拷贝构造,禁止bug】windows程序崩溃调试终极武器
文章插图- 打压|英方打压升级,禁止电信运营商,安装新的华为设备
- 国家网信办公开征求意见!禁止38类App超范围收集用户个人信息
- 机制|反马赛克机制问世,这种软件应该被禁止吗
- 零基础小白Python入门必看:通俗易懂,搞定深浅拷贝
- 关于Netty ByteBuf 的零拷贝
- 禁止生产和销售|明确了,我省马上全面禁用!
- SpringBoot构造流程源码分析:Web应用类型推断
- 构造流程源码分析:ApplicationListener加载
- 奖销售|新规明确禁止网购「忽悠式打折」:12 月起正式实施
- 排除华为或损失594亿!英国却宣布:明年9月起禁止安装华为5G设备
