給定非平凡的資料結構:
claas MyClass
{
public:
MyClass():x(0), p(nullptr)
{}
private:
int x;
int* p;
};
c 規范是否保證將為?MyClass指向的陣列中的每個實體呼叫默認建構式ptr?
主函式()
{
MyClass* ptr = new MyClass[5];
}
uj5u.com熱心網友回復:
c 規范是否保證將為?
MyClass指向的陣列中的每個實體呼叫默認建構式ptr?
是的,它得到保證,如下所述。
從新運算式的檔案中:
::(optional) new new-type initializer(optional) (2)a創建的物件
new-expression按照以下規則進行初始化:
如果 type 或
new-type是陣列型別,則初始化物件陣列。
- 如果沒有初始化器,則每個元素都是默認初始化的。
并且遠離默認初始化檔案:
new T (2)默認初始化在三種情況下執行:
2) 當一個具有動態存盤持續時間的物件由
new-expression沒有初始化器的a創建時;
而且,
默認初始化的效果是:
- 如果
T是陣列型別,則陣列的每個元素都是默認初始化的;
(強調我的)
請注意最后一條陳述句,它說“每個元素都是默認初始化的”,這意味著(在您的示例中)默認建構式將根據要點 1呼叫:
如果 T 是(可能是 cv 限定的)非 POD(C 11 前)型別別,則考慮建構式并對其進行針對空引數串列的多載決議。呼叫選擇的建構式(默認建構式之一)為新物件提供初始值;
這意味著可以保證在您的示例中呼叫默認建構式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/521006.html
