[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, 0); // 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 对象会得到一个错误?