关于C++构造函数的FAQ
[1] 构造函数是用来干什么的?
构造函数构建类的对象,初始化类变量,分配资源(内存、文件、信号量、套接口等等)
[2] List x; 和 List x();有什么不同?
前一个是定义List的一个对象,后者则是一个返回值为List 的函数
[3] 是否一个类的构造函数可以调用另一个构造函数来初始化自己?
不可以;举一个例子来看这个问题:
class Foo {
public:
Foo(char x);
Foo(char x, int y);
...
}; Foo::Foo(char x)
{
...
Foo(x, ); // this line does NOT help initialize the this object!!
...
}
语句:
Foo(x, 0); 只是初始化了一个临时对象,而不是this对象,因此,该语句没有起到应有的效果。
[4] 是否Fred类的默认的函数函数就一定是Fred::Fred()?
不一定,默认构造函数指的是不带参数的构造函数,例如:A::A(int x = 3, int y = 5)
因此,一个类可以不存在默认构造函数,这是必须注意的!
[5] 如果要创建一个Fred 对像数组,什么样的构数函数会被调用?
对于 Fred a[10]; 或者 Fred *a = new Fred(); 如果类Fred存在默认构造函数,则调用十次默认构造函数;如果类Fred不存在默认构造函数,则编译出错;
对于 Fred a[10] = {Fred(5,7)}; 则调用 Fred(int, int) 构造函数;
[6] 构造函数初始化成员变量时,应该用 “初始化列表” 还是 “赋值”?
初始化列表;
优点:1)提高性能;2)
[7] 在构造函数中用this 指针是否有问题?
[8]什么是“名字构造函数”(Named Constructor Idiom)?
[9] “值返回”意味着额外的拷贝吗?
[10] 为什么我们不能在构造函数初始化列表中初始化一个 static 成员变量?
[11] 为什么一个有 static 成员变量的类会有链接错误?
[12] 什么是“static initialization order fiasco”?
[13] 我该如果避免 “static initialization order fiasco”?
[14] 为什么 construct-on-first-use 什么静态变量而不是指针?
[15] 怎么才能避免静态成员中的“static initialization order fiasco” ?
[16] 我是否要为内建类型的“static initialization order fiasco”而担心?
[17] 如果构造函数出错了怎么办?
[18] 什么是“命名参数惯用法”(Named Parameter Idiom)?
[19] 为什么我通过Foo x(Bar())声明一个Foo 对象会得到一个错误?
关于C++构造函数的FAQ的更多相关文章
- javascript笔记—— 构造函数
出处:http://www.cnblogs.com/RicCC/archive/2008/02/15/JavaScript-Object-Model-Execution-Model.html 数据类型 ...
- C++11 FAQ中文版--转
更新至英文版October 3, 2012 译者前言: 经过C++标准委员会的不懈努力,最新的ISO C++标准C++11,也即是原来的C++0x,已经正式发布了.让我们欢迎C++11! 今天获得St ...
- 《深度探索c++对象模型》chapter2 构造函数语义学
关于c++,最常听到的一个抱怨是,编译器背着程序员做了太多事情,conversion运算符是最常被引用的一个例子:jerry schwarz,iostream函数库的建筑师,就曾经说过一个故事,他说他 ...
- FusionCharts导出图表常见问题(FAQ)汇总---FusionCharts常见问题大全
在前面几篇文章中,我们介绍了FusionCharts生成Flash图表常见问题FAQ以及使用中的一些常见报错及调试/解决方法.本文继续介绍FusionCharts导出图表时的一些常见问题(FAQ). ...
- C++ 风格与技术 FAQ(中文版)
Bjarne Stroustrup 的 C++ 风格与技术 FAQ(中文版) 原作:Bjarne Stroustrup 翻译:Antigloss 译者的话:尽管我已非常用心,力求完美,但受水平所 ...
- 《FontForge常见问题FAQ》字王翻译版
<FontForge常见问题FAQ> 字王翻译版 原文: http://fontforge.github.io/en-US/faq/ 翻译: 字王·中国 blog: http://bl ...
- 在全局对象(不是指针)的构造函数里不要对std集合做太多操作
写MaxvisionOnvif的时候,我用个宏把每个Command类注册到了CommandBuilder里面,通过全局对象初始化实现的,如下: void CommandBuilder::Registe ...
- .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...
- javascript工厂模式和构造函数模式创建对象
一.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创 ...
随机推荐
- thinkphp 中js 实现刷新
<input name="Button5" value="返回" id="Button5" style="width:56p ...
- python str + int
TypeError: cannot concatenate 'str' and 'int' objects 1. print 'Is your secret number " + str(p ...
- python中对文件、文件夹的操作需要涉及到os模块和shutil模块。
创建文件:1) os.mknod("test.txt") 创建空文件2) open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件 创建 ...
- ExtJS 4 类系统
ExtJS 4的类系统(class system)进行了一次重大重构,ExtJS4的新架构就是基于这套新的类系统构建的,因此有必要先了解以下这个class system这篇文章分为四章 I: &quo ...
- Web.config总结
%windir%/Microsoft.NET/Framework/v2.0.50727/CONFIG目录下machine.config定义了针对当前机器的WinForm程序和asp.net应用程序的配 ...
- 用STRACE解决公司真实故障一例
这是相关分析文档.为了职业操守,已修改相关公司敏感信息~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 关于论坛每五分钟左右,会有warning.html跳转出现的原因调查 (warning. ...
- VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序
原文:VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序 在开发环境(Win7+VS2010+Outlook 2010)上做一个Outlook AddIn,运行Outlook时报如下错误: ...
- org.springframework.beans.BeanUtils
org.springframework.beans.BeanUtils的一个demo.可以很优雅的实现将父类字段的值copy到子类中 下面例子的输出结果(子类使用父类的toString方法,有点意思吧 ...
- java学习之数组排序一:选择排序
在讲完java中数组定义的两种方式之外,这里需要讲一下对数组常用的方法,第一个就是排序. 加入我们现在有个数组:int[] arr = {12,87,34,3,98,33,103}; 思路1: 1.首 ...
- 不成功的TCA代码
%--brain mask with the brain tissue mask_name = 'C:\Users\Administrator\Desktop\workspace\preprocess ...