不使用默认构造函数初始化对象数组
在 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(&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中文网其他相关文章!