[英]C++ stack allocated variable not destructed (/destroyed?)
我對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;
}
這是否在Windows GUI應用程序(具有WinMain
入口點的Windows應用程序)中?
如果是這樣,則從命令行運行標准輸出時不會自動顯示它。 我不確定為什么會這樣,但是IIRC正在運行:
myapp | cat
應導致正確設置標准輸出。
我無法重現該行為。
#include<iostream>
struct FunkyNumber{
int m_intValue;
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;
}
void call(){
FunkyNumber num = 4;
FunkyNumber num2 = 6;
num += num2;
std::cout << num << std::endl; // This works okay!
// Should be destroyed here!
}
int main(int argc, char **argv){
call();
std::cout << "call ended" << std::endl;
}
這很好。 人們之所以提倡SSCCE ,不僅是為了更輕松地為您提供幫助,而且還因為它可以幫助您找到問題所在(顯然不在發布的代碼中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.