我創建了一個簡單的程序,在命令提示符下「繪製」形狀。我正在使用幾個類實現,但主要問題在Command抽象類中,更具體地說是該類中的析構函數。我用我定義的DEBUG模式編譯它,每次析構函數刪除一個對象時,都會打印一個'-'
。在循環的第一遍時刪除保留字不調用析構函數
Command類看起來是這樣的:
class Command {
public:
Command(){
#ifdef DEBUG
std::cout << '+';
#endif
}
virtual ~Command() {
#ifdef DEBUG
std::cout << '-';
#endif
}
virtual void execute() = 0;
virtual void unexecute() = 0;
};
我在另一個類中調用循環如下:
vector<Command*> history_;
while(position_ != 0) {
delete *history_.end();
history_.pop_back();
position_--;
}
如果position_
大於1將打印'-'
N - 1次,但它不會在第一次刪除循環時調用析構函數。
'矢量 ::端()'不迭代器返回一個有效的對象。 –
難道你沒有看到它,因爲輸出緩衝?如果用'std :: cout.flush()'刷新緩衝區,會怎麼樣? –