首页 > 解决方案 > 在 C++ 中使用构造函数初始化类的数据成员的最佳方法

问题描述

我知道以下三种初始化 c++ 类的数据成员的方式。但是哪一种更安全,建议使用。请告诉我为什么

样式-1

    class example{
        int var1 = 0;
        double *var2 = NULL;
        
        example()
        {}
    };

样式-2

    class example{
        int var1;
        double *var2;
        
        example()
        {
            var1 = 0;
            var2 = NULL;
        }
    };

样式 3

    class example{
        int var1;
        double *var2;
        
        example():var1(0),var2(NULL)
        {}
    };

标签: c++classconstructor

解决方案


这很难回答正确,因为对于像这样的“最佳实践”问题,您总会得到几种意见。

当不确定什么是最佳实践时,我建议遵循 C++ 核心指南。关于您的主题,请参阅C.48C.49

  1. 更喜欢样式 1 而不是样式 2,3
  2. 喜欢风格 3 而不是风格 2

从我的角度简要回顾一下推理:

  1. 样式 1 允许使用默认构造函数(不实现构造函数,但仍在初始化)
  2. 样式 1 允许标题的读者查看默认值
  3. 使用样式 1,您只需要查看一个位置以确保正确初始化变量,并且您不能“忘记”在您的构造函数之一中初始化变量
  4. 当使用参数初始化变量时,仍然需要样式 3。它仍然比样式 2 更可取,因为变量的“初始化”是通过初始化在代码中的预期位置清楚地传达的,而不是作为可能隐藏在构造函数代码中的赋值操作而稍微模糊

推荐阅读