C++11中的final关键词
来源:互联网 发布:电子数据库 编辑:程序博客网 时间:2024/06/03 22:23
阅读stroustrup网站中对于C++11的FAQ,其中有final关键词。猿猿立刻就想到了一道非主流的面试题:
如何创建一个不能被继承的类?
先看“先进生产力的代表”C++11(猿猿有点落伍了,现在还在学习11标准,sigh~~),so easy!
class A{public: virtual ~A() final;};
那回到以前的标准上,又该如何做呢?
有一个想法很自然:将析构函数private化,这样就不能被继承了。可是理想很丰满,现实很骨感。这样的类A不能在栈中实例化,即使在堆中也不能delete掉。另外一个bug就是:如果继承类B实例是new出来的,并且不调用delete,编译器并不会报错。总而言之,析构函数private化会导致这个类不能被”有效“实例化。
那么,以前的大拿们是怎么做到的呢?猿猿们的创造性是没有边界的。利用了”友元的不可继承性“,来达到不能被继承的效果。参考这里。
上述博文中采用的方法,每一个不能被继承的类都需要来定义一个NoHeritance虚类。本文作者是个懒猿猿,不喜欢重复的东西,就弄了一个模板类
template <class Base>class NoHeritanceInterface{NoHeritanceInterface() = default;~NoHeritanceInterface() = default;friend class Base;};
至于为啥原文博主要用虚继承的形式,懒猿猿也不是很明白。没有数据也没有虚表自然不会造成菱形继承的困扰。
这样看来,C++11的新特性确实能够省事不少。我们要好好利用之。
0 0
- C++11中的final关键词
- final关键词在多线程环境中的使用
- final关键词
- Objective-C中的self关键词
- C语言中的static关键词
- 关键词static、final、 static final学习
- Java学习之final关键词
- Java之final关键词详解
- 关键词final的作用总结
- Java关键词final和static
- C Sharp中的Virtual、Override和new关键词理解
- java中final关键词的作用
- 小白笔记---------------------------------------java关键词final
- Java:final关键词使用(上)
- Java:final关键词使用(下)
- java笔记(四)[java中的import关键词&java中的javadoc用法及注释说明&java中的final关键字&java中的内部类详解]
- ActionScript中的关键词
- 汇编中的关键词
- JQuery获取子孩子和兄弟元素的方法
- 日经社説 20150308 何が患者連続死を招いたか
- 编译时出现fatal error C1853: "debug/xxx.pch" is not a precomplied header file with......错误的原因及解决办法(转)
- 社説 20150308 福島の避難住民 「帰還」見据えた支援の強化を
- .net学习第五天
- C++11中的final关键词
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- android中比较两张图片的相似度
- Struts2拦截器(Interceptor)
- 社説 20150308 米VSイスラエル 中東安定へ亀裂の修復を図れ
- SpringMVC Controller内部跳转如何被拦截器拦截
- android第一记————各种属性的设置
- 结构张量
- 爱自己,实现财务自由