Существует ли разница в стоимости между разыменованием всего объекта кучи и только некоторых его членов?
Есть ли разница в стоимости между инициализацией A и B в следующем коде?
int main() { Class* pClass = new Class; Class A = *pClass; //All heap object is dereferenced. auto B = (*pClass).member; //Is all heap object dereferenced or just the member? }
Инициализация A приведет к разыменованию всего объекта, на который указывает pClass, что означает, что все его члены будут скопированы из кучи в стек. Происходит ли то же самое при инициализации B? Или инициализация B менее затратна, потому что только один член объекта будет разыменован?
Еще один похожий вопрос:
class Thing { public: Class1 member1; Class2 member2; Class3 member3; Class1 foo() { return member1; } }; int main() { Thing* pThing = new Thing; Thing A = *pThing; //All heap object is dereferenced. Class1 B = pThing->foo(); //Is the heap object entirely dereferenced? }
В приведенном выше коде является ли инициализация B менее дорогостоящей, чем инициализация A? Поскольку функция foo имеет дело только с одним членом.
Что я уже пробовал:
Ничего....... Неприменимый.......
Afzaal Ahmad Zeeshan
Зачем вообще это делать? Вы можете рассмотреть возможность использования семантики копирования или перемещения, если это необходимо, и если вам нужно получить доступ к данным для целей чтения, почему бы не получить прямой доступ через указатель?
Объясните немного, чтобы мы могли вам помочь.