没有默认构造函数的对象数组初始化
当尝试初始化缺少默认构造函数的对象数组时,程序员经常会遇到错误“ 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中文网其他相关文章!