2012-09-27 38 views
-1

編輯:改變了我的問題更有意義適當的方式在寫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];} 

它的工作原理。請向我解釋這種行爲。

+2

既不應該工作。 –

+0

請解釋投票。 – coredump

回答

1

nr(0)是數據成員nr的初始化。

{a = new T[10]; }是一個構造體,其一個值分配給之後在初始化列表中的初始化已被執行的a數據成員。

{}是一個空的構造函數體,它意味着構造函數什麼都不做(除了初始化nr,當然,因爲它在初始化列表中)。

a = new int[10]在初始化程序列表和構造函數體之間是無稽之談,該語言的語法不允許它。它不應該編譯,但如果你發現一個編譯器接受它,然後它崩潰,你將不得不看編譯器的文檔的解釋。

0

也不應該編譯。適當的方式將是這樣:

  • 第一種情況:A::A(): nr(0), a(new int[5]){}
  • 第二種情況:A<T>::A(): nr(0), a(new T[10]){}
+0

爲'a'分配多少內存? –

+0

doh壞複製和粘貼。現在修好 –

1

它應該是這個樣子:

template<class T> 
class A { 
public: 
    int nr; 
    T *a; 
    A(); 
}; 

template<class T> 
A<T>::A() : nr(0), a(new T[42]) { }