2015-12-02 51 views
-1

我需要製作一個dyanmic數組。我有這個構造函數的原型。 ExArray(int);indivdual elements must be default constructed。它是什麼意思,當它想要的元素被默認構建?它是否希望元素在默認構造函數中初始化,而不是在此構造函數中初始化?動態數組「默認構造元素」C++

+1

我建議與老師澄清作業要求,而不是SO。 – SergeyA

回答

1

推測類構造函數是ExArray類。但是這是一個容納其他對象的容器類(例如類似於std::vector)。例如,爲了擁有大小爲10的ExArray,其中包含類X的實例,合理的要求是使X具有默認構造函數。這樣,容器中的10個項目中的每一個都將默認構建。否則,很難定義ExArray,因爲必須爲其包含的類提供構造函數參數。

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()

+2

請注意,'elements [i] .T();'是無效的C++。真正的代碼會做'new(&elements [i])T();' – aschepler