Так я называю перегруженное сложением двух объектов слова сФункция вызова разрушает объект возврата, даже если он явно не создан? C++
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;
}
После ш + ш выполняются объект Приговора деконструкции (я перегружен деструктор print to stdout) Я создал объект предложения раньше, но я не думаю, что это влияет на него. Я не понимаю, как объект предложения деконструируется, когда он даже не сконструирован (слишком сложный конструктор по умолчанию). Я также не понимаю, почему он будет создан, так как я даже не верну его. Я запускал его через gdb, и он определенно вызывает деструктор предложения при выходе из функции добавления. Я могу предоставить больше кода, просто подумал, что кто-то может знать проблему без него.
Ваша функция объявлена возвращать 'Sentence', следовательно, это' Sentence' должен быть построен и разрушен в какой-то момент – tkausl
я перегружен конструктор по умолчанию и не был вызван, только деструктор. И когда он прошел через gdb, я никогда не попадал в конструктор @tkausl –
Это просто UB, ничего невозможного. См. [Что происходит, когда функция, возвращающая объект, заканчивается без оператора возврата) (http://stackoverflow.com/questions/39118324/what-happens-when-a-function-that-returns-an-object-ends- no-a-return-statem/39118529 # 39118529) – songyuanyao