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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-22 20:52:24883浏览

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

没有默认构造函数的对象数组初始化

当尝试初始化缺少默认构造函数的对象数组时,程序员经常会遇到错误“ X::X() 在此上下文中是私有的”。出现此错误的原因是默认构造函数通常设置为 private 以防止无意的对象创建。

一种解决方案是使用placement-new,这是一个低级 C 运算符,允许将对象直接构造到一个块中记忆。下面是一个示例:

class Car
{
    int _no;
public:
    Car(int no) : _no(no) // Initialize _no directly
    {
    }
};

int main()
{
    int userInput = 10;
    void *rawMemory = operator new[](userInput * sizeof(Car)); // Allocate raw memory
    Car *myCars = static_cast<Car *>(rawMemory); // Cast to Car *

    for (int i = 0; i < userInput; ++i)
    {
        new(&myCars[i]) Car(i); // Construct Car objects in-place using placement-new
    }

    // Destruct objects in reverse order
    for (int i = userInput - 1; i >= 0; --i)
    {
        myCars[i].~Car(); // Destroy the object using placement-delete
    }

    operator delete[](rawMemory); // Release raw memory

    return 0;
}

此技术提供了一种在不修改构造函数的访问说明符的情况下初始化对象数组的方法。它遵循最佳实践,避免不必要的默认构造函数,同时实现灵活高效的对象创建。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn