Для большинства моих программ я передавал объекты по ссылке:
MyClass
{
public:
auto DoStuff()->void
{
//Doing stuff...
}
};
MySubClass
{
public:
auto CallFunction(MyClass &MCO)->void
{
MCO.DoStuff();
}
};
int main()
{
MyClass MCO;
MySubClass MSCO;
MSCO.CallFunction(MCO);
}
Для объекта, который я не нужно редактировать (просто вызывать его функции), является ли передача по ссылке наиболее эффективным решением для памяти?
Или, альтернативно, используя необработанный указатель?
MyClass
{
public:
auto DoStuff()->void
{
//Doing stuff...
}
};
MySubClass
{
public:
auto CallFunction(MyClass *MCO)->void
{
MCO->DoStuff();
}
};
int main()
{
MyClass *MCO;
MySubClass MSCO;
MSCO.CallFunction(MCO);
delete MCO;
}
Если вам не нужно изменять объект, передайте его постоянная ссылка.
void CallFunction(const MyClass &MCO)
{
MCO.DoStuff();
}
Обычно вы должны выбирать модель прохождения, основанную на семантике, а не на оптимизации. Передавать объекты по ref или const ref. Передайте данные по значению и избегайте указателей, если ваша модель программирования не требует этого. Вы почти никогда не можете добиться большего успеха, чем компилятор для микрооптимизации.
После того, как вы профилировали свою программу и определили узкое место, вы обычно можете получить больше отдачи от затраченных средств, изменив алгоритм или способ хранения данных.
Других решений пока нет …