在 C 中,当尝试在没有可公开访问的默认构造函数的情况下初始化对象数组时,会遇到错误,如代码片段如下:
class Car { private: Car(){}; // Default constructor hidden }; int main() { Car *cars = new Car[10]; // Error: Default constructor not accessible }
出现此错误是因为无法直接调用 Car 的私有默认构造函数。但是,有一个解决方案允许创建这样的数组而不将默认构造函数公开。
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(&cars[i]) Car(i); } }
通过利用placement-new,可以在分配的内存位置创建对象,而不需要公共默认构造函数。
通过使用placement-new,即使默认构造函数是私有的,也可以初始化对象数组。这种技术提供了更大的灵活性,并允许在不影响封装原则的情况下创建复杂的对象数组。
以上是如何在没有公共默认构造函数的情况下在 C 中初始化对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!