【发布时间】:2016-10-08 09:06:00
【问题描述】:
所以我把两个 Word 对象的重载加法称为
Word w;
w+w;
声明和定义是:
Sentence operator+(const Word&) const;
Sentence Word::operator+(const Word& rightWord) const{
std::cout<<"Entering function Word::operator+(const Word&)."<<std::endl;
std::cout<<"Leaving function Word::operator+(const Word&).\n"<<std::endl;
}
在执行 w+w 后,一个 Sentence 对象被解构(我重载了析构函数以打印到 stdout)我之前创建了一个句子对象,但我认为这不会影响它。我不明白一个句子对象在它甚至没有被构造时是如何被解构的(也重载了默认构造函数)。我也不明白为什么会创建它,因为我什至没有真正归还它。我通过 gdb 运行它,当它退出加法函数时,它肯定是在调用句子的析构函数。我可以提供更多代码,只是想有人可能知道没有它的问题。
【问题讨论】:
-
你的函数被声明为返回一个
Sentence,因此这个Sentence必须在某个时候被构造和销毁 -
我重载了默认构造函数,它没有被调用,只有析构函数。当在 gdb 中逐步完成时,我从来没有遇到过构造函数@tkausl
-
Sentence Word::operator+(const Word& rightWord) const ------ 该函数在 w+w 上创建一个新词;然后销毁它,因为它没有被使用。
-
@tkausl:这不正确。是的,函数声明需要实现来构造和销毁
Sentence,但它不会导致实现自动执行此操作。实现不符合要求,所以它只是未定义的行为。
标签: c++ constructor destructor