动态数组“默认构造元素”c ++

时间:2015-12-02 18:30:44

标签: c++ arrays default

我需要制作一个动态阵列。我有这个构造函数原型。 ExArray(int); indivdual elements must be default constructed {{1}}。当它希望元素是默认构造时意味着什么?它是否希望在默认构造函数中初始化元素而不是在此构造函数中?

2 个答案:

答案 0 :(得分:1)

据推测,类构造函数用于ExArray类。但这是一个容器类,它包含其他对象(例如类似于std::vector)。例如,为了拥有大小为10的ExArray,其中包含类X的实例,合理的要求是使X具有默认构造函数。这样,容器中的10个项目中的每一个都将是默认构造的。否则,很难定义ExArray,因为必须为它包含的类提供构造函数参数。

答案 1 :(得分:0)

在像std::array<T,n> arr或C风格T arr[n]的静态数组中,当构造数组时,C ++会自动调用数组中每个元素的默认构造函数(T::T())。删除数组时,它会调用每个元素的析构函数。

std::vector这样的动态数组(其中可以追加/删除元素)需要在添加元素时手动处理。例如:

T* elements = static_cast<T*>( std::malloc(n * sizeof(T)) );
for(std::ptrdiff_t i = 0; i < n; ++i)
    new (&elements[i]) T();

n元素分配原始内存,并将指针强制转换为指向未初始化T元素的指针。然后它手动调用每个元素的默认构造函数。

使用placement new初始化对象/调用构造函数。可以像elements[i].~T()一样调用析构函数。

相关问题