Сообщество вики, потому что это почти наверняка вызывает UB.
Если у вас есть конструктор копирования, вы можете создать оператор присваивания, используя новое размещение:
struct Transaction {
Transaction(Book& bb, Patron& pp, Date dd)
: b(bb), p(pp), d(dd) { }
Transaction(const Transaction & src)
: b(src.b), p(src.p), d(src.d) { }
Transaction & operator= (const Transaction & src) {
if (this != &src) {
this->~Transaction();
Foo * copy = new (this) Transaction(src);
return *copy;
} else {
return *this;
}
}
Book& b;
Patron& p
Date d;
};
Это может работать с вашим компьютером, с вашим компилятором, с определенными настройками оптимизации. С другой стороны, это не может быть. Или он может внезапно перестать работать, когда ваша операторская система автоматически обновляет библиотеку C ++ ABI. Или же он может внезапно перестать работать, когда вы доставите его своему клиенту, у которого немного другая версия библиотеки C ++ ABI.
Независимо от того, как вы обрезаете, изменение ссылки - неопределенное поведение.