Это неопределенное поведение, поскольку временный объект Bar
будет уничтожен при ;
.
Foo Bar::Copy()
{
return Bar();
}
безопаснее.НО благодаря @Cat Plus Plus и @celtschk я понял, что этот метод приводит к нарезке, теряя всю Bar
специфическую информацию.Чтобы сохранить Bar
объект Copy()
, необходимо вернуть либо ссылку, либо указатель на объект.Здесь мы снова в начале, так как это UB.Таким образом, Bar
должен выделяться динамически, чтобы его ссылка / указатель находилась в функции вне Copy()
.Кто должен нести ответственность за удаление этого динамически сгенерированного объекта Bar
?
#include <memory>
std::shared_ptr<Foo> Bar::Copy()
{
return std::shared_ptr(new Bar());
}
shared_ptr
сделает это автоматически для вас.