当对象超出范围时,C++ 会调用析构函数吗?
Does C++ call the destructor when an object goes out of scope?
我认为是的,但是
#include <iostream>
struct S {
int t;
};
class C {
private:
S s;
public:
C() {s.t = 7;}
~C(){std::cout << "bye C" << std::endl;}
};
class D {
private:
S s;
public:
D(int t) {s.t = t;}
~D() {std::cout << "bye D(" << s.t << ")" << std::endl;}
};
int main() {
C c0();
C* c1 = new C();
D d0();
D d1(42);
std::cout << __LINE__ << std::endl;
delete c1;
std::cout << __LINE__ << std::endl;
}
只打印 (https://ideone.com/95DK9E)
28
bye C
30
bye D(42)
那么为什么 c0
和 d0
没有通过调用它们的析构函数来正确销毁?
c0
和 d0
不是对象。您已经编写了两个函数声明。
我认为是的,但是
#include <iostream>
struct S {
int t;
};
class C {
private:
S s;
public:
C() {s.t = 7;}
~C(){std::cout << "bye C" << std::endl;}
};
class D {
private:
S s;
public:
D(int t) {s.t = t;}
~D() {std::cout << "bye D(" << s.t << ")" << std::endl;}
};
int main() {
C c0();
C* c1 = new C();
D d0();
D d1(42);
std::cout << __LINE__ << std::endl;
delete c1;
std::cout << __LINE__ << std::endl;
}
只打印 (https://ideone.com/95DK9E)
28
bye C
30
bye D(42)
那么为什么 c0
和 d0
没有通过调用它们的析构函数来正确销毁?
c0
和 d0
不是对象。您已经编写了两个函数声明。