zoukankan      html  css  js  c++  java
  • 关于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, 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 对象会得到一个错误?

  • 相关阅读:
    cavans笔记
    input心得
    杂乱的笔记
    CSS学习目录
    CSS3四个自适应关键字——fill-available、max-content、min-content、fit-content
    闭包
    0..0 小白
    Scrum
    Git与GitHub
    博客1
  • 原文地址:https://www.cnblogs.com/wiessharling/p/4122075.html
Copyright © 2011-2022 走看看