Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Jovanna avatar Jovanna 186 Точки

възможно ли е директно копиране на полетата при copy-assignment operator=

Здравейте,

защо при реализиране на copy-assignment operator= трябва да се заделя нова памет при всички случаи, не може ли , когато логиката позволява и със съответните проверки, в някои от случаите (или при всички ако е възможно) директно да се копират полетата върху this, от other?

Поздрави!

 

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки
Best Answer

Никога не сме казвали, че при реализиране на copy assignment трябва да се заделя памет.

Казвали сме, че ако ти се налага да го пишеш, най-вероятно ти се налага, защото заделяш памет и трябва да я пренасяш. Обратна е зависимостта. Не заделяш памет, защото правиш copy assignment, напротив - пишеш copy assignment, защото заделяш памет. Rule of three - ако управляваш ресурс и имаш едно от големите три, ти трябват другите. Ако управляваш ресурс пишеш големите три

Ако можеш директно да копираш полетата, значи най-вероятно не ти трябва този оператор, защото той точно това прави когато е auto-generated. Не че не може да го напишеш, но ако си тръгнала да го пишеш сигурно имаш причина да го правиш - няма смисъл да преписваш това, което той по принцип си прави.

В примерите, в които го пишем, ни се налага да го пишем защото сме заделили памет и трябва тази памет да я копираме в другия обект, защото сама по себе си тя няма да се копира ако просто копираме указателите. Ако пък не заделяме памет и не управляваме ресурс и просто трябва всяко поле да му дадем стойност съотвестващото поле - ами значи няма нужда да го пишем, защото той така се държи ако не го напишем.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.