Передача объектов эффективно?

Для большинства моих программ я передавал объекты по ссылке:

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;
}

1

Решение

Если вам не нужно изменять объект, передайте его постоянная ссылка.

void CallFunction(const MyClass &MCO)
{
MCO.DoStuff();
}

Обычно вы должны выбирать модель прохождения, основанную на семантике, а не на оптимизации. Передавать объекты по ref или const ref. Передайте данные по значению и избегайте указателей, если ваша модель программирования не требует этого. Вы почти никогда не можете добиться большего успеха, чем компилятор для микрооптимизации.

После того, как вы профилировали свою программу и определили узкое место, вы обычно можете получить больше отдачи от затраченных средств, изменив алгоритм или способ хранения данных.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]