禁止拷贝构造,禁止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程序崩溃调试终极武器
文章插图
- 每经18点丨美将禁止支付宝、微信支付等8个中国应用软件,外交部回应;铁路部门推出免费退票措施;违反居家隔离规定外出,大连3人被拘
- 最后4天!我国开始全面禁止美国发明,专家叹息:希望来得及
- 中国明令禁止装置卫星锅是为啥?现在才明白,原来是为我们好
- 这两种行为明令禁止!出现或将直接注销支付宝账号,你有过吗?
- 「Windows」快速禁止某个程序联网,不用第三方工具
- Spring Application实例化流程和构造方法参数
- 社区团购电商争议背后:超低价屡遭投诉,有供应商禁止供货
- 华海顺达:禁止供货针对所有社区团购,京东阿里加持的也不例外
- 经济学人全球头条:供应商禁止给社区团购平台供货,美团优选通报首个贪腐案,嫦娥五号成功进入月地转移轨道
- 放电180年,牛津电铃响了100亿次,人类却不知其电池构造