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

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

DDD
发布: 2024-12-26 01:57:09
原创
261 人浏览过

How Can I Initialize an Object Array in C   Without a Public Default Constructor?

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

在 C 中,当尝试在没有可公开访问的默认构造函数的情况下初始化对象数组时,会遇到错误,如代码片段如下:

class Car
{
private:
  Car(){}; // Default constructor hidden
};

int main()
{
  Car *cars = new Car[10]; // Error: Default constructor not accessible
}
登录后复制

出现此错误是因为无法直接调用 Car 的私有默认构造函数。但是,有一个解决方案允许创建这样的数组而不将默认构造函数公开。

解决方案:Placement-New

Placement-new 是一种允许创建的技术直接位于指定内存位置的对象。它可用于绕过默认构造函数的可访问性限制。下面的代码演示了它的用法:

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

int main()
{
  void *raw_memory = operator new[](NUM_CARS * sizeof(Car)); // Allocate raw memory
  Car *cars = static_cast<Car *>(raw_memory);
  // Initialize objects at specific memory locations
  for (int i = 0; i < NUM_CARS; ++i) {
    new(&amp;cars[i]) Car(i);
  }
}
登录后复制

通过利用placement-new,可以在分配的内存位置创建对象,而不需要公共默认构造函数。

结论

通过使用placement-new,即使默认构造函数是私有的,也可以初始化对象数组。这种技术提供了更大的灵活性,并允许在不影响封装原则的情况下创建复杂的对象数组。

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

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