編輯:改變了我的問題更有意義適當的方式在寫C構造++
如果我有一個類:
class A{
public:
int nr;
int *a;
A();
};
A::A(): nr(0), a = new int[10]{}
這chrases,但如果我有
A::A(): nr(0) {a = new int[10];}
它的工作原理。請向我解釋這種行爲。
編輯:改變了我的問題更有意義適當的方式在寫C構造++
如果我有一個類:
class A{
public:
int nr;
int *a;
A();
};
A::A(): nr(0), a = new int[10]{}
這chrases,但如果我有
A::A(): nr(0) {a = new int[10];}
它的工作原理。請向我解釋這種行爲。
nr(0)
是數據成員nr
的初始化。
{a = new T[10]; }
是一個構造體,其一個值分配給之後在初始化列表中的初始化已被執行的a
數據成員。
{}
是一個空的構造函數體,它意味着構造函數什麼都不做(除了初始化nr
,當然,因爲它在初始化列表中)。
a = new int[10]
在初始化程序列表和構造函數體之間是無稽之談,該語言的語法不允許它。它不應該編譯,但如果你發現一個編譯器接受它,然後它崩潰,你將不得不看編譯器的文檔的解釋。
也不應該編譯。適當的方式將是這樣:
A::A(): nr(0), a(new int[5]){}
A<T>::A(): nr(0), a(new T[10]){}
爲'a'分配多少內存? –
doh壞複製和粘貼。現在修好 –
它應該是這個樣子:
template<class T>
class A {
public:
int nr;
T *a;
A();
};
template<class T>
A<T>::A() : nr(0), a(new T[42]) { }
既不應該工作。 –
請解釋投票。 – coredump