我需要製作一個dyanmic數組。我有這個構造函數的原型。 ExArray(int);
與indivdual elements must be default constructed
。它是什麼意思,當它想要的元素被默認構建?它是否希望元素在默認構造函數中初始化,而不是在此構造函數中初始化?動態數組「默認構造元素」C++
-1
A
回答
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
相關問題
- 1. C++,默認構造函數
- 2. C++默認構造
- 3. 向量中元素的默認構造
- 4. C++模板默認構造
- 5. 靜態和默認構造函數
- 6. C++默認構造函數和默認參數
- 7. 默認構造
- 8. 默認構造函數C++頭和cpp
- 9. 瞭解默認的構造函數C++
- 10. 默認構造函數C++格式
- 11. 默認構造函數C++錯誤
- 12. C++默認拷貝構造函數
- 13. 未找到C++默認構造函數
- 14. C++:動態地分配使用非默認的構造
- 15. 默認移動構造函數
- 16. 默認構造函數
- 17. constexpr默認構造函數
- 18. 非默認構造函數
- 19. 動態數組結構,刪除元素
- 20. 默認的構造
- 21. C++動態構造
- 22. 動態類實例與非默認構造函數
- 23. Objective C靜態構造函數與動態構造函數
- 24. C++初始化動態數組元素
- 25. 在std :: map中插入非默認構造元素
- 26. 避免標準容器中元素的默認構造
- 27. 如何避免thrust :: device_vector中元素的默認構造?
- 28. 從參數化構造函數調用默認構造函數
- 29. 默認的默認構造函數,爲什麼不是用戶提供的默認構造函數?
- 30. C++一個類的默認構造函數調用另一個類的另一個默認構造函數
我建議與老師澄清作業要求,而不是SO。 – SergeyA