Я прочитал много статей об оптимизации возвращаемого значения. Тем не менее, я не уверен, что полностью понимаю, происходит ли это в следующем случае (адреса на самом деле всегда идентичны):
#include "stdafx.h"
class Type
{
public:
Type(int a) { m_a = a; }
private:
Type(const Type & other) {}
int m_a;
};
class Base
{
public:
Base() : instance(42) {}
virtual Type & GetType()
{
printf("Base: Address of instance: %i\n", &instance);
return instance;
}
private:
Type instance;
};
class Derived : public Base
{
public:
virtual Type & GetType()
{
printf("Derived\n");
return Base::GetType();
}
};
int main()
{
printf("Base class\n");
Base b;
printf("Main: Address of instance: %i\n", &(b.GetType()));
printf("\nDerived class\n");
Derived d;
printf("Main: Address of instance: %i\n", &(d.GetType()));
}
Всегда ли возврат по ссылке гарантирует отсутствие вызова конструктора копирования?
Или здесь происходит RVO ?