当前位置:  开发笔记 > 编程语言 > 正文

非静态成员数组初始化的任何变通方法?

如何解决《非静态成员数组初始化的任何变通方法?》经验,为你挑选了0个好方法。

在C++中,无法在初始化列表中初始化数组成员,因此成员对象应该具有默认构造函数,并且应该在构造函数中正确初始化它们.除了不使用数组之外,还有(合理的)解决方法吗?

[任何可以使用初始化列表初始化的东西在我们的应用程序中远比使用构造函数更好,因为这些数据可以由编译器和链接器分配和初始化,并且每个CPU时钟周期都很重要,甚至在此之前main.但是,并不总是可以为每个类都有一个默认的构造函数,而且,在构造函数中再次重新初始化数据反而无法实现目的.]

例如,我想要这样的东西(但这个不起作用):

class OtherClass {
private:
    int data;
public:
    OtherClass(int i) : data(i) {}; // No default constructor!
};

class Foo {
private:
    OtherClass inst[3]; // Array size fixed and known ahead of time.
public:
    Foo(...)
        : inst[0](0), inst[1](1), inst[2](2)
        {};
};

我所知道的唯一解决方法是非阵列的:

class Foo {
private:
    OtherClass inst0;
    OtherClass inst1;
    OtherClass inst2;
    OtherClass *inst[3];
public:
    Foo(...)
        : inst0(0), inst1(1), inst2(2) {
        inst[0]=&inst0;
        inst[1]=&inst1;
        inst[2]=&inst2;
    };
};

编辑:应该强调的是OtherClass,没有默认构造函数,并且非常希望链接器能够分配所需的任何内存(Foo将创建一个或多个静态实例),使用堆基本上是禁止的.我已经更新了上面的例子,以突出第一点.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有