0
我有一個C++代碼:C++構建全局變量
// includes, variables etc...
GraphStructure graphStructure;
void getInput() {
graphStructure = GraphStructure(nodesCount, edgesCount);
// HERE, the destructor is called!
graphStructure.init(nodesCount, edgesCount);
// Same code as constructor, but now its okay.
}
int main(int argc, char* argv[]) {
getInput();
}
我想知道,爲什麼對象的析構函數其施工後直接調用。析構函數在變量作用域的末尾被調用,它應該在主函數結束之後。
你知道...... C++沒有GC,所以它不會調用析構函數,除非你告訴它 – Steve 2014-10-06 19:13:54
@Steve:不一定是真的。如果你在棧上創建一個類類型的對象,析構函數在超出作用域時或者編譯器認爲沒有副作用時會被調用,並且在超出作用域之前可以處理它。後者是我認爲在這裏發生的事情。 – 2014-10-06 19:17:32
你必須遵守三個(或五個)的規則 - 寫一個適當的賦值操作符 – 2014-10-06 19:30:42