Предположим, я создаю класс с именем MyClass
, который содержит ссылочную переменную m_my_resource. Эта ссылочная переменная по существу является просто именованным псевдонимом, связанным с некоторой другой ячейкой памяти.Что происходит с ссылочной переменной, когда ее ссылка «умирает»?
MyClass
class MyClass
{
public:
MyClass(const MyResource& my_resource) :
m_my_resource(my_resource){}
private:
const MyResource& m_my_resource;
}
теперь позволяет сказать, что я пытаюсь сделать следующее:
main
{
MyClass my_class(utils::getMyResource());
//continue doing stuff
}
Что именно происходит в этом случае? Я определил MyClass
, чтобы иметь только один конструктор, который принимает ссылку (значение lvalue) до MyResource
.
Однако в моей основной функции я создаю экземпляр MyClass
с временным объектом (rvalue). Почему мой код способен скомпилировать? Не содержит my_class
ссылочную переменную, связанную с некоторой временной ячейкой памяти? По существу переменная, в которой была связана эталонная переменная, теперь «умерла», что происходит с эталонной переменной?
Кроме того, это случай, когда я хочу, чтобы мой класс имел конструктор, который принимает ссылки rvalue?
Связанный/обман: https://stackoverflow.com/questions/14735630/which-standard-wording-tells-us-that-ref-to-const-temporary-lifetime-extension-o Возможно, более конкретный, но обман первого: https: // stackoverflow.com/questions/30519148/life-of-tempor-pass-through-function-by-reference –
Также * «Почему мой код способен скомпилировать?» * * * * код C++, который еще не компилируется. И последнее, но не менее важное: один вопрос на вопрос, пожалуйста. –
@BaummitAugen Вопросы, на которые вы ссылаетесь, мне трудно понять. Возможно ли, чтобы экземпляр «MyClass» стал владельцем этого временного объекта? – Izzo