#include <iostream>
using namespace std;
class A{
int b;
public:
A(){
cout<<"Constructor for class A called\n";
b = 6;
}
~A(){
cout<"Destructor called for class A\n";
}
};
class B{
A a;
public:
B(){
cout<<"Constructor for class B called\n";
}
~B(){
cout<<"Destructor called for class B\n";
}
};
int main(void){
B obj1;
return 0;
}
执行上面的代码时,A和B的构造函数按预期调用,但是当B的对象即obj1超出范围时,只调用B的析构函数。为什么A的析构函数没有被调用,即使A的obj是B的成员之一?
答案 0 :(得分:5)
你在A的析构函数中错过了<
:
cout << "Destructor called for class A\n";
如果您没有收到表达式的编译错误:
cout < "Destructor called for class A\n"
|
//less than operator
好吧,您的编译器正在尝试将cout
与const char*
进行比较。这是一件奇怪的事情。但是,唉,将<
更改为<<
,它应该有效:http://ideone.com/8TDyy
答案 1 :(得分:3)
你忘记了&lt;在A的析构函数中的字符。
该行
cout<"Destructor called for class A\n";
只是意味着:将cout与给定的字符串进行比较并返回true或false。
你应该写
cout<<"Destructor called for class A\n";
然后它才能正常工作。
在&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;操作员使这更清楚(我总是说代码需要呼吸(它需要一些空气))。
答案 2 :(得分:2)
您的代码显示:
cout&lt;“析构函数调用了类A \ n”;
应该有两个&lt;&lt;'s,而不是一个。我很惊讶它完全编译......
答案 3 :(得分:1)
~A(){
cout<"Destructor called for class A\n";
}
与cout一起使用的运算符是<<
而不是<
的运算符小于~A(){
cout<<"Destructor called for class A\n";
}
纠正它,你的代码就没事了。
{{1}}