DelegatingCTorPlusInClass

DelegatingCTorPlusInClass

我想做以下事情:

class DelegatingCTorPlusInClass
{
public:
  DelegatingCTorPlusInClass()
    :
    DelegatingCTorPlusInClass(m_a, m_b) // m_a and m_b are "random"
  {
  };

  DelegatingCTorPlusInClass(int a)
    :
    DelegatingCTorPlusInClass(a, m_b) // m_b is "random"
  {
  };

  DelegatingCTorPlusInClass(const std::string &b)
    :
    DelegatingCTorPlusInClass(m_a, b) // m_a is "random"
  {
  };

  DelegatingCTorPlusInClass(int a, const std::string &b)
    :
    m_a(a),
    m_b(b)
  {
    // DO THINGS
  };

private:
  int m_a = 42;
  std::string m_b = "42";
};

但是,从一个构造函数传递给另一个构造函数的成员尚未初始化,因此基本上是“随机”的。那我怎样才能实现类似的目标呢?

最佳答案

[class.base.init]/9:



这证明在主构造函数中为成员分配了垃圾:

DelegatingCTorPlusInClass(int a, const std::string &b)
    :
    m_a(a), // this is mem-initializer for m_a, so m_a = 42 is ignored and you are getting garbage
    m_b(b) // the same for m_b
{
};

为了避免重复使用默认值,您可以为它们使用常量,因此您将获得以下内容:
DelegatingCTorPlusInClass() : DelegatingCTorPlusInClass(m_a_default, m_b_default)
{
};

关于c++ - 使用类内成员初始化委派构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26866859/

10-10 18:14