2015-02-04 84 views
1

我想創建一個構造函數,刪除一個目錄對象的名稱,然後目錄中的子目錄,最後是目錄本身。但是,使用delete [] *subDirectories行時會導致段錯誤。如何刪除空對象的數組?

子目錄通過

subDirectories[subDirectoryCount++] = new Directory(arguments[1], umask, time, this); 

Directory::~Directory() 
{ 
    delete [] name; 

    for (int i = 0; i < subDirectoryCount; i++) 
     delete subDirectories[i]; 
    delete [] *subDirectories; 
} 
+2

'delete [] subDirectories'。確保'subDirectories'是用'new []'創建的,否則你的行爲不確定。 – 0x499602D2

+5

如果是C++應該明確避免C風格的數組,並使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector) – NetVipeC

回答

6

寫分配:

delete [] subDirectories; 

確保subDirectories使用new []分配。

無論如何,不​​要停止這樣做。如果要共享元素,請使用std::vector<std::unique_ptr<Directory>>,或者使用std::vector<std::shared_ptr<Directory>>。無論哪種方式,讓圖書館爲你管理記憶。