Вот минимальный пример:Почему GCC 5.3.0 дает предупреждение при связывании ссылки на «это» указатель
class A
{
A* const& this_ref;
public:
A() : this_ref(this) {}
};
GCC 5.3.0 дает предупреждение:
предупреждение: временная граница для 'A :: this_ref' только сохраняется до конструктор выходит [-Wextra] A(): this_ref (это) {}
Является this
временно? Что ... MSVC 2015 молчит об этом, и ссылаясь на членов класса на this_ref->member
вне конструктора в моем случае дает ожидаемое поведение (но может быть просто случай UB, не уверен).
EDIT:
Примечание Этот вопрос проходит один связан как можно дубликата, потому что это не общий вопрос о том, как создать такую ссылку, но о предупреждении GCC (и возможные другие, кроме MSVC компиляторы) производит, когда создавая один.
Возможный дубликат [Возможно ли получить ссылку на «этот» указатель в классе тела без использования имени класса?] (Http://stackoverflow.com/ Вопросы/39258248/is-it-possible-to-get-reference-to-this-pointer-in-class-body-without-using-th) – skypjack
Поскольку 'this' существует только при запуске конструктора и затем перестает есть, временно. (Это именно то, что предупреждает вам предупреждение.) –
Можете ли вы взять адрес 'this'? Не думайте так. Как вы ожидаете, что ссылка будет работать, если у адресата нет адреса? –