首页 > 后端开发 > C++ > 如何在没有默认构造函数的情况下在 C 中初始化对象数组?

如何在没有默认构造函数的情况下在 C 中初始化对象数组?

Susan Sarandon
发布: 2024-12-22 11:02:10
原创
861 人浏览过

How to Initialize an Object Array in C   Without a Default Constructor?

不使用默认构造函数初始化对象数组

在 C 中,当创建对象数组时,会调用默认构造函数来初始化每个元素。但是,在某些情况下,如果默认构造函数是私有的或不存在,则在初始化对象数组时可能会遇到错误。

为了克服这个问题,您可以采用placement-new技术,该技术提供了一种就地初始化对象的方法,无需调用默认构造函数。

以下是如何使用placement-new 来初始化没有默认值的对象数组构造函数:

class Car {
private:
    int _no;
public:
    Car(int no) : _no(no) {}
};

int main() {
    void *raw_memory = operator new[](NUM_CARS * sizeof(Car));
    Car *ptr = static_cast<Car *>(raw_memory);
    for (int i = 0; i < NUM_CARS; ++i) {
        new(&amp;ptr[i]) Car(i);
    }

    // destruct in inverse order
    for (int i = NUM_CARS - 1; i >= 0; --i) {
        ptr[i].~Car();
    }
    operator delete[](raw_memory);

    return 0;
}
登录后复制

在此代码中,raw_memory 表示用于存储 Car 对象数组的原始内存块。然后,我们将其转换为 Car * 指针,并使用 Placement-new 就地构造每个对象,并使用指定的数字对其进行初始化。

使用完数组后,请记住反向销毁对象排序并删除使用placement-new分配的原始内存。这种方法允许您初始化对象数组,即使它们的默认构造函数无法访问。

以上是如何在没有默认构造函数的情况下在 C 中初始化对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板