Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovфлаг владельцаА в каком умном указателе используется флаг владельца и чем он лучше счетчика ссылок? В моём собственном. Не требует ссылки на структуру. А не покажете его, когда там флаг устанавливается и как копирование происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 20:33 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
список инициализацииТо что идет после имени конструктора после двоеточия - это список инициализации. В нем можно вызывать конструкторы членов класса. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Аналог без класса: Код: plaintext 1. 2. Спасибо за комментарий. То есть это можно так инициализировать поля класса с помощью конструктора класса? Не совсем понимаю, зачем это надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 21:15 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
покажетекогда там флаг устанавливается и как копирование происходит? В copy-конструкторе, натурально. И копирование происходит с помощью оператора присваивания. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 21:24 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, А зачем нужен этот смартуказатель с флагом владельца? Почему нельзя применить простой указатель когда нет владения, и какой-нибудь unique_ptr для владения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 21:32 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПочему нельзя применить простой указатель когда нет владения, и какой-нибудь unique_ptr для владения? Затем, что право владения у меня переходящее и мне было проще изобрести собственный велосипед чем ковыряться в STL. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 21:35 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovправо владения у меня переходящее Мне просто хотелось обеспечить работоспособность кода Код: sql 1. без лишних операций с динамической памятью и копированием её содержимого. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 21:43 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Допустим (хотя auto_ptr/unique_ptr как раз и реализуют передачу владения - не знаю зачем ковыряться в STL чтобы это узнать). Но наличие обертки над указателем, без гарантии что указатель еще валидный, создает ложное ощущение что управление автоматическое, хотя по сути контроль за валидностью указателя по прежнему лежит на программисте. Т.е. состояние когда флаг владения не установлен - бессмысленно. Сам указатель должен быть таким флагом, а при передаче владения - обнуляться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 21:48 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDimitry Sibiryakovправо владения у меня переходящее Мне просто хотелось обеспечить работоспособность кода Код: sql 1. без лишних операций с динамической памятью и копированием её содержимого. А где тут могут возникнуть проблемы с динамической памятью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 21:59 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyСам указатель должен быть таким флагом, а при передаче владения - обнуляться. Да, это было бы логично если бы я был уверен, что "старый" экземпляр уже не будет использоваться после создания нового. Возможно, при следующей чистке кода я так и сделаю. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 22:26 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
egorychMaximuS_G, это не конструктор, а оператор присваивания. и обязательно делай проверку на присваивание самому ИМХО, согласен в этом плане с товарищем Саттером, который говорит, что наличие таких проверок зачастую озаначает просчет в архитектуре. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. И никаких проверок не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 22:54 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
MozokegorychMaximuS_G, это не конструктор, а оператор присваивания. и обязательно делай проверку на присваивание самому ИМХО, согласен в этом плане с товарищем Саттером, который говорит, что наличие таких проверок зачастую озаначает просчет в архитектуре. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. И никаких проверок не нужно. Но в Вашем случае произойдет копирование данных, а в случае с проверкой - нет. Эти конструкторы по разному реагируют на присваивание одного и того же объекта друг другу. Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 23:18 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Mozok, Лучше (хоть по сути и то же самое) реализовать метод swap(T&) и тогда оператор копирования (как и swap) будет выглядеть тривиально (а значит менее подвержен ошибкам, в т.ч. из-за дублирования кода конструктора копирования): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Таким образом останется реализовать только конструктор копирования, а не дублировать его логику в оператор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 23:27 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
MaximuS_GНо в Вашем случае произойдет копирование данных, а в случае с проверкой - нет. Эти конструкторы по разному реагируют на присваивание одного и того же объекта друг другу. Или я не прав? Прав. Но присвоение в себя - это ошибка кодирования. В норме ее не должно быть. А заниматься оптимизацией кода, который редко исполняется - это пустая трата ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 23:29 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMozok, Лучше (хоть по сути и то же самое) реализовать метод swap(T&) и тогда оператор копирования (как и swap) будет выглядеть тривиально (а значит менее подвержен ошибкам, в т.ч. из-за дублирования кода конструктора копирования): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Таким образом останется реализовать только конструктор копирования, а не дублировать его логику в оператор. Но при изменениях класса придется менять и void swap и конструктор копирования? Либо наоборот :) Код: plaintext 1. 2. 3. 4. Останется реализовать только оператор = с глубоким копированием. При изменении класса придется менять только его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 23:50 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMaximuS_GНо в Вашем случае произойдет копирование данных, а в случае с проверкой - нет. Эти конструкторы по разному реагируют на присваивание одного и того же объекта друг другу. Или я не прав? Прав. Но присвоение в себя - это ошибка кодирования. В норме ее не должно быть. А заниматься оптимизацией кода, который редко исполняется - это пустая трата ресурсов. А присвоение в себя в данном случае можно как-то отловить во время компиляции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2013, 23:52 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMaximuS_GНо в Вашем случае произойдет копирование данных, а в случае с проверкой - нет. Эти конструкторы по разному реагируют на присваивание одного и того же объекта друг другу. Или я не прав? Прав. Но присвоение в себя - это ошибка кодирования. В норме ее не должно быть. А заниматься оптимизацией кода, который редко исполняется - это пустая трата ресурсов. Тогда я запутался, лучше делать проверку, или нет? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 00:00 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНо присвоение в себя - это ошибка кодирования. Ой ли? Мания компактного кода заставляет каждого второго писать что-то типа Код: plaintext 1. Но кто сказал, что это ошибка кодирования? Можно долго спорить о философской стороне вопроса. Но практическая сторона однозначно заявляет, что такой код совершенно корректен и не безсмысленен абсолютно, чтобы однозначно назвать его говонокодом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 00:19 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
MaximuS_GТогда я запутался, лучше делать проверку, или нет? :) Делайте, делайте. При разработке универсальных контейнеров динамических данных лишняя проверка лишней не бывает. А для глубокой оптимизации сложных алгоритмов, работающих с динамическими данными нужно выбрасывать к чертям все эти универсальные контейнеры и писать велосипеды, реализующие алгоритм и структуры данных строго под задачу. В противном случае хоть с этой проверкой, хоть без нее при интенсивном использовании динамических строк, массивов и производных от них типов столько лишних телодвижений происходит, что эта проверка - капля в море. Но если таким путем достигаются иные выгоды, то и ладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 00:26 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Edd.DragonMaximuS_GТогда я запутался, лучше делать проверку, или нет? :) Делайте, делайте. При разработке универсальных контейнеров динамических данных лишняя проверка лишней не бывает. А для глубокой оптимизации сложных алгоритмов, работающих с динамическими данными нужно выбрасывать к чертям все эти универсальные контейнеры и писать велосипеды, реализующие алгоритм и структуры данных строго под задачу. В противном случае хоть с этой проверкой, хоть без нее при интенсивном использовании динамических строк, массивов и производных от них типов столько лишних телодвижений происходит, что эта проверка - капля в море. Но если таким путем достигаются иные выгоды, то и ладно. Ясно, спасибо! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 00:34 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Либо наоборотЛибо наоборот :) Код: plaintext 1. 2. 3. 4. Останется реализовать только оператор = с глубоким копированием. При изменении класса придется менять только его. Нельзя вызывать присвоение для еще несконструированного объекта с мусором в полях. Сначала надо создать валидный эземпляр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 01:12 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Edd.DragonAnatoly MoskovskyНо присвоение в себя - это ошибка кодирования. Ой ли? Мания компактного кода заставляет каждого второго писать что-то типа Код: plaintext 1. А где тут компактность? Если уж компактно записывать то вот так (на 1 символ короче) :) Код: plaintext 1. Но кто сказал, что это ошибка кодирования? Можно долго спорить о философской стороне вопроса. Но практическая сторона однозначно заявляет, что такой код совершенно корректен и не безсмысленен абсолютно, чтобы однозначно назвать его говонокодом. Конечно это говнокод. Именно такой код получается когда стоит задача написать компактно, а не понятно. Конкретно по проверке на присвоение в себя - эту проверку можно делать только для оптимизации. Если без нее код присвоения работает неверно - то это неверная реализация присвоения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 01:24 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЛибо наоборотЛибо наоборот :) Код: plaintext 1. 2. 3. 4. Останется реализовать только оператор = с глубоким копированием. При изменении класса придется менять только его. Нельзя вызывать присвоение для еще несконструированного объекта с мусором в полях. Сначала надо создать валидный эземпляр. Все члены класса к этому моменту проинициализированы дефолтными значениями. За исключением тех у кого нет конструктора без параметров - их придется писать в списке инициализации. А как возможно? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 01:50 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
возможно?, Это все возможно в некоторых частных случаях. И будет работать до первого рефакторинга, когда один частный случай перейдет в другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 02:03 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyвозможно?, Это все возможно в некоторых частных случаях. И будет работать до первого рефакторинга, когда один частный случай перейдет в другой. Приведите пример когда это не будет работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 02:28 |
|
||
|
что делает оператов присваивания в моем коде?
|
|||
|---|---|---|---|
|
#18+
Приведите примерAnatoly Moskovskyвозможно?, Это все возможно в некоторых частных случаях. И будет работать до первого рефакторинга, когда один частный случай перейдет в другой. Приведите пример когда это не будет работать? Например, почленное копирование из константной ссылки непотокобезопасно, т.к. неатомарно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2013, 03:13 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38099651&tid=2020538]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 269ms |
| total: | 523ms |

| 0 / 0 |
