我很新的C++,但我想我就在棧上宣佈說對象應該自動地被破壞/破壞,當他們走出去的範圍有多大?在我目前正在處理的小型項目中,情況並非如此。C++堆棧中分配變量不破壞(/銷燬?)
void MainWindow::clickTest() {
FunkyNumber num = 4;
FunkyNumber num2 = 6;
num += num2;
std::cout << num << std::endl; // This works okay!
// Should be destroyed here!
}
我的析構函數應該這樣做:
virtual FunkyNumber::~FunkyNumber() {
std::cout << "goodbye cruel world! (" << m_intValue << ")" << std::endl;
// m_intValue is just the int value of this "FunkyNumber"
}
但沒有出來爲標準了!
或許應該提,我使用Qt - 但是這僅僅是一個普通的C++類,因此這應該不是真正的問題,從我可以告訴...
編輯: funkynumber.cpp:
#include "funkynumber.h"
FunkyNumber::FunkyNumber(int num)
: m_intValue(num) {
std::cout << "made a funkynumber " << num << std::endl;
}
FunkyNumber::~FunkyNumber() {
std::cout << "goodbye cruel world! (" << m_intValue << ")" << std::endl;
}
int FunkyNumber::intValue() const {
return m_intValue;
}
void FunkyNumber::operator+=(const FunkyNumber &other) {
m_intValue += other.intValue();
}
void FunkyNumber::operator=(const FunkyNumber &other) {
m_intValue = other.intValue();
}
bool FunkyNumber::operator==(const FunkyNumber &other) {
return other.intValue() == m_intValue;
}
std::ostream &operator<<(std::ostream &outStream, const FunkyNumber &num) {
outStream << "FunkyNumber (" << num.intValue() << ")";
return outStream;
}
的對象被摧毀,你只是沒有看到它無論出於何種原因。 – juanchopanza
你可以將整個FunkyNumber類添加到帖子嗎? – RonenKr
將不得不看到更多的代碼 - 可能很簡單,因爲不使用析構函數實現,而是調用默認(空)析構函數。 –