有没有办法在C ++中后期初始化成员变量(类)?

问题描述 投票:8回答:6

我来自Java背景。我有以下程序。

#include <string>
#include <iostream>

class First {
    public:
    First(int someVal): a(someVal) {

    }
    int a;
};

class Second {
    public:
    First first;
    Second()  {   // The other option would be to add default value as ": first(0)"
        first = First(123);

    }
};

int main()
{
    Second second;
    std::cout << "hello" << second.first.a << std::endl;
}

Second类中,我想将first变量保持未初始化状态,直到我在Second()'s constructor中专门对其进行了初始化。有办法吗?还是我只剩下两个选择?:

  1. 提供无参数的构造函数。
  2. 使用一些默认值初始化它,然后重新分配所需的值。

我无法使用正确的值初始化初始化列表中的first,因为该值是在某些操作后获得的。因此,first的实际所需值仅在Second()构造函数中可用。

c++ class constructor initialization lazy-initialization
6个回答
7
投票
我的建议:使用功能:

4
投票
初始化成员初始化器列表中的first

2
投票
您可以按照您在评论中所说的做,或者,您可以首先指向First的指针,并在需要时给它一个内存,尽管我不建议这样做

1
投票
分离对象生存期的一种方法是使用堆,将first用作指针,并在需要时随时对其进行初始化:

1
投票
这句话是问题的核心:

0
投票
如果不编写代码来明确初始化成员变量,则使用默认的初始化程序来对其进行初始化。
© www.soinside.com 2019 - 2024. All rights reserved.