Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
18.11.2016, 12:03
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
Вот такая ситуация: - есть большой гипотетический массив, который надо создать динамически. - элементы массива - объекты некоторого класса А. - есть класс В, объект которого надо привязать к объекту класса А, при этом объекту класса А надо привязать этот объект В (если логически, то объект В надо "поставить" на массив А так, чтобы при обращении к В можно было быстро определить, на каком объекте класса А он стоит, а тыкнув в объект класса А, можно было понять, что на нём "стоит" объект В) начнём с последнего, логично сделать 2 shared_ptr или у А weak_ptr, а B - shared_ptr. в таком случае, нам нужно сделать массив, состоящий из shared_ptr-ов на класс А. в таком случае, если массив большой, это накладно по ресурсам. Ну даже, не столько накладно, сколько: не пойму, правильно ли вообще так делать? По ресурсам это +8 байт. Ну и ещё, если делать всё правильно, нужен безопасный контейнер, например vector, а емплейсить в вектор большое количество объектов долго, дольше, чем вызвать new с неявным конструктором на все элементы. Почитал немного статьи, пишут, что в случае больших массивов надо брать boost::shared_array. В стандарте такого ничего нет. Как правильнее сделать? Пока думаю vector<shared_ptr<СА>> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2016, 13:32
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
Если это вектор(или массив) - может быть хранить индексы элементов? Даже если(не дай бог, конечно) произойдет переаллокация массива, индексы не испортятся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2016, 15:21
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
CEMbВот такая ситуация: - есть большой гипотетический массив, который надо создать динамически. - элементы массива - объекты некоторого класса А. - есть класс В, объект которого надо привязать к объекту класса А, при этом объекту класса А надо привязать этот объект В (если логически, то объект В надо "поставить" на массив А так, чтобы при обращении к В можно было быстро определить, на каком объекте класса А он стоит, а тыкнув в объект класса А, можно было понять, что на нём "стоит" объект В) начнём с последнего, логично сделать 2 shared_ptr или у А weak_ptr, а B - shared_ptr. в таком случае, нам нужно сделать массив, состоящий из shared_ptr-ов на класс А. в таком случае, если массив большой, это накладно по ресурсам. Ну даже, не столько накладно, сколько: не пойму, правильно ли вообще так делать? По ресурсам это +8 байт. Ну и ещё, если делать всё правильно, нужен безопасный контейнер, например vector, а емплейсить в вектор большое количество объектов долго, дольше, чем вызвать new с неявным конструктором на все элементы. Почитал немного статьи, пишут, что в случае больших массивов надо брать boost::shared_array. В стандарте такого ничего нет. Как правильнее сделать? Пока думаю vector<shared_ptr<СА>> А какое соотношение количества обьектов класса А и класса В ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2016, 15:45
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
В общем случае если В не один, есть подозрение что таки да. создается класс в который в раздел приват запихивается массив класса А и массив класса В. Туда же запихивается map который ищет нужный класс В по свойствам , а shared_ptr -ы на связанную пару возвращаются интрефейсной функцией на лету. А и В не содержат никакой информации к кому они привязаны. а map содержит только действительные существующие связи. В случае необходимости привязки одного В ко многим А в value map-ы лежит список индексов массива классов А. приблизительно так .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2016, 16:16
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
д0kВ общем случае если В не один, есть подозрение что таки да. создается класс в который в раздел приват запихивается массив класса А и массив класса В. Туда же запихивается map который ищет нужный класс В по свойствам , а shared_ptr -ы на связанную пару возвращаются интрефейсной функцией на лету. А и В не содержат никакой информации к кому они привязаны. а map содержит только действительные существующие связи. В случае необходимости привязки одного В ко многим А в value map-ы лежит список индексов массива классов А. приблизительно так .... Рядышком в привате обертки можно сделать обратный map , что бы обьекты класса А могли найти себя и свои связи на B. Для этого ИМХО , связь один к одному или один ко многим нужно выделить в отдельный класс структуру , и для нее определить функции по критерию для автоматического попадания в мапы индексного поиска. Возможно слишком сложно , зато масштабируемо , в случае изменения бизнес хотелок по управлению связями с меньшей болью придется все переписывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2016, 20:48
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
alex_kЕсли это вектор(или массив) - может быть хранить индексы элементов? Даже если(не дай бог, конечно) произойдет переаллокация массива, индексы не испортятся :)я тоже так думал, когда у меня был просто массив shared_ptr<A[]>, и хранить shared_ptr<A> на элемент этого массива - нехорошо. Поэтому было решено в таком случае хранить индекс. д0kА какое соотношение количества обьектов класса А и класса В ? А - десятки тысяч, В - единицы. д0kВ общем случае если В не один, есть подозрение что таки да. создается класс в который в раздел приват запихивается массив класса А и массив класса В. Так и есть уже, только массив А не один, их несколько, они напиханы в иерархическое дерево, это дерево приватно в том самом классе. Но это неважно, можно считать, что это всё один массив. д0kТуда же запихивается map который ищет нужный класс В по свойствам , а shared_ptr -ы на связанную пару возвращаются интрефейсной функцией на лету. А и В не содержат никакой информации к кому они привязаны. а map содержит только действительные существующие связи. Интересный вариант... а почему именно через мапу? Объекты класса А могут легко содержать shared_ptr на В. Тут немного надо объяснить, как всё устроено: Есть 2 функционала: 1. Работает с тем самым иерархическим деревом, ведёт обработку объектов класса А по требованию: выдаёт всю инфу по объекту, в т.ч. указатель на В, с этим всё ок. 2. Работает со списком объектов класса В. По требованию должен показать положение объекта класса В "в" массиве класса А. Позиция/лист в дереве сейчас запоминается в В как второй указатель(будем все shared_ptr звать указателями, weak-слабыми, *-опасными). Т.е. лист дерева ищется быстро. А вот позиция в массиве и сам элемент пока никак не ищутся и не хранятся :) Мапа в данном случае, как мне кажется, слегка избыточна, но может я что не понял... А, да, соответствие 1:1. Т.е. В может находится только в одном месте. д0kВозможно слишком сложно , зато масштабируемо , в случае изменения бизнес хотелок по управлению связями с меньшей болью придется все переписывать. Спасиб, я подумаю про это, может даже несмотря на 1:1 стоит это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2016, 17:31
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
CEMb, не обязательно мап подойдет любой контейнер который устроит вас по скорости поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2016, 08:39
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
CEMb, большой - это сколько? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2016, 08:47
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
д0k, вообще, в принципе, shared ptr надо применять тогда, когда у тебя нет определенного фиксированного времени жизни у объектов, т. е. когда нужно чтобы ссылка на объект куда-то отдана и это продлевает жизнь этому объекту. у тебя про владение и время жизни ни слова не сказано, так что можно предположить, что shared ptr вообще не нужен. если же он нужен, то никакими накладными расходами эту нужду не снять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2016, 17:12
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
MasterZivд0k, вообще, в принципе, shared ptr надо применять тогда, когда у тебя нет определенного фиксированного времени жизни у объектов, т. е. когда нужно чтобы ссылка на объект куда-то отдана и это продлевает жизнь этому объекту. у тебя про владение и время жизни ни слова не сказано, так что можно предположить, что shared ptr вообще не нужен. если же он нужен, то никакими накладными расходами эту нужду не снять... В предложенной мной идее Объеткты А и В сами по себе могу существовать сколько угодно. а shared ptr это связь конкретного А с конретным В, то есть владение относится к связи , а не объектам. Когда связь изменяется это будет уже другой объект типа связь. Внутри может быть аж три shared ptr -а, в зависимости от хотелок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 05:40
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
д0кне обязательно мап подойдет любой контейнер который устроит вас по скорости поиска.не, у меня вопрос был про то, почему держать информацию об отношениях в отдельном контейнере? Поясню свою мысль: при любом поиске (А или В) нам надо будет как-то искать один из объектов в контейнере. Если информацию об принадлежности хранить непосредственно в двух объектах А и В, то доступ к инфе получается более быстрым. MasterZivбольшой - это сколько?10К...100К наверно. Но, тут есть момент, это не один массив, их несколько, все элементы в них уникальные (т.е. один элемент класса А входит только в один массив), в плане отношений B<->A это неважно, это важно только в плане нарезки этих самых массивов. MasterZivу тебя про владение и время жизни ни слова не сказано, так что можно предположить, что shared ptr вообще не нужен.может и так, но у меня массивы динамические по размеру. Оператором new пользоваться нельзя :) как быть? Во-вторых, нужно держать указатели на объекты этих массивов. Т.е. по науке, должен использоваться механизм, блокирующий возможность удаления объектов класса А, пока на них есть ссылки. И, так как один массив - одна сущность, то и блокирующий возможность удаления самих массивов, пока на один из элементов ссылается объект класса В - это реализовано, В имеет указатель на массив. По идее, это гарантирует, что если я буду использовать опасный указатель внутри В на А, всё будет ОК. Но я могу сменить в объекте класса В указатель на массив и забыть поменять указатель на объект :) В общем, получается так: нужен механизм, наподобие shared_ptr, но для массива, такой что: если хоть кто-то ссылается на один из элементов массива, массив не может быть удалён. чтоб проще понимать было, такая аналогия: массивы А - это дискретные карты, а объекты В - это объекты на картах. Обращаясь к объекту В мы должны узнать, на какой он карте и в какой точке. Обращаясь к точке на карте, мы должны узнать, есть ли кто в этой точке. И нельзя удалить карту, если хоть в одной её точке кто-то находится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 10:30
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
CEMbд0кне обязательно мап подойдет любой контейнер который устроит вас по скорости поиска.не, у меня вопрос был про то, почему держать информацию об отношениях в отдельном контейнере? Поясню свою мысль: при любом поиске (А или В) нам надо будет как-то искать один из объектов в контейнере. Если информацию об принадлежности хранить непосредственно в двух объектах А и В, то доступ к инфе получается более быстрым. 1. Отдельный контейнер нужен для экономии ресурсов. CEMbв таком случае, если массив большой, это накладно по ресурсам. 2. Отдельный контейнер нужен , что бы не не прибивать молотком определенный тип связи к классу. интуиция мне подсказывает что типов связи может быть много , если их все включать в классы то вопрос ресурсов, в том числе человекочасовых на разработку и тестирование встанет еще жестче. 3. Мы на форуме где обсуждаются реляционные БД, поэтому нормализация отношений абсолютно естетственный подход к хранению информации для людей, которые професионально занимаются базами данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 10:55
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
д0k1. Отдельный контейнер нужен для экономии ресурсов.Мне пока не понятно. В моём варианте, у меня только 2+ указателя. В твоём варианте это объект класса + 2+ указателя. Ресурсов тратится больше, плюс дополнительный функционал на поиск этого объекта-зависимости. д0k2. Отдельный контейнер нужен , что бы не не прибивать молотком определенный тип связи к классу. интуиция мне подсказывает что типов связи может быть много , если их все включать в классы то вопрос ресурсов, в том числе человекочасовых на разработку и тестирование встанет еще жестче.Разработку и тестирование веду я один :) Теперь по связи. Допустим, типов связи может быть много, всё равно не вижу смысла их выносить в отдельных класс, до тех пор, пока эта связь не обзаведётся своим независимым от А и В функционалом. Далее, большое число типов связей тогда подразумевает: 1. большое число типов связей от А к В 2. большое число типов связей от В к А в обоих случаях я добавлю в А и В соответственно признак типа связи, а функционал будет в самих этих классах, потому что только они знают, что с ним делать. д0k3. Мы на форуме где обсуждаются реляционные БД, поэтому нормализация отношений абсолютно естетственный подход к хранению информации для людей, которые професионально занимаются базами данных.Ну да, но это слишком общий подход к отношению между данными. А у меня модель довольно простая. Нет, я, конечно, подумаю в эту сторону, но вряд ли что дельное мне в голову придёт(т.е. зачем формализовать отношения в отдельном классе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 11:00
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
CEMbд0k1. Отдельный контейнер нужен для экономии ресурсов.Мне пока не понятно. В моём варианте, у меня только 2+ указателя. В твоём варианте это объект класса + 2+ указателя. Ресурсов тратится больше, плюс дополнительный функционал на поиск этого объекта-зависимости. д0k2. Отдельный контейнер нужен , что бы не не прибивать молотком определенный тип связи к классу. интуиция мне подсказывает что типов связи может быть много , если их все включать в классы то вопрос ресурсов, в том числе человекочасовых на разработку и тестирование встанет еще жестче.Разработку и тестирование веду я один :) Теперь по связи. Допустим, типов связи может быть много, всё равно не вижу смысла их выносить в отдельных класс, до тех пор, пока эта связь не обзаведётся своим независимым от А и В функционалом. Далее, большое число типов связей тогда подразумевает: 1. большое число типов связей от А к В 2. большое число типов связей от В к А в обоих случаях я добавлю в А и В соответственно признак типа связи, а функционал будет в самих этих классах, потому что только они знают, что с ним делать. д0k3. Мы на форуме где обсуждаются реляционные БД, поэтому нормализация отношений абсолютно естетственный подход к хранению информации для людей, которые професионально занимаются базами данных.Ну да, но это слишком общий подход к отношению между данными. А у меня модель довольно простая. Нет, я, конечно, подумаю в эту сторону, но вряд ли что дельное мне в голову придёт(т.е. зачем формализовать отношения в отдельном классе) Я же выше сказал , что контейнер содержит только действительные существующие , иницализированные связи. Если кто то с кем то не связан определенным типом связь , то обьекты порознь существуют , но записи описыващей связь в контейнере нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 11:13
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
д0kЯ же выше сказал , что контейнер содержит только действительные существующие , иницализированные связи. Если кто то с кем то не связан определенным типом связь , то обьекты порознь существуют , но записи описыващей связь в контейнере нет.А, всё, до меня дошло, у меня в классах указатели уже есть, да, и занимают место. Ок, ладно, я пока всё равно против отдельной сущности для связи. Допустим, я сделаю дочерние классы А2 и В2 с указателями, которые будут ссылаться на В и А соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 17:32
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
д0кто есть владение относится к связи , а не объектам. Когда связь изменяется это будет уже другой объект типа связь. Так не бывает. Если кто-то хочет владеть связью, то он захочет владеть и тем, что она связывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 18:09
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
Ну как вариант, шарь всё через shared_ptr-ы и не парься. 100 тыщ на 64 битах оно вполне может выдержать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 20:43
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
MasterZivд0кто есть владение относится к связи , а не объектам. Когда связь изменяется это будет уже другой объект типа связь. Так не бывает. Если кто-то хочет владеть связью, то он захочет владеть и тем, что она связывает. конечно, поэтому я выше говорил о 3 shared_ptr в иерархии. один shared_ptr на объект типа связь и 2 объекта которые она связывает, хранящиеся внутри . Я говорил о том, что shared_ptr-ы всех возможных объектов потенциально нуждающихся в связях не нужно хранить постоянно , а генерировать в момент создания объекта типа связь. В объектах не имеющих постоянных валидных связей подобного рода поля не нужны , а в некоторых случаях даже вредны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.11.2016, 20:49
|
|||
|---|---|---|---|
|
|||
shared_ptr и большие динамические массивы |
|||
|
#18+
MasterZivНу как вариант, шарь всё через shared_ptr-ы и не парься. 100 тыщ на 64 битах оно вполне может выдержать.я пока сделал так: вместо make_shared<T> сделал shared_ptr<T>(new T[size], default_delete<T>[]) и я забыл одну очень важную хрень сказать, потому что про неё забыл совсем: на самом деле, у каждого объекта класса А есть вектор объектов класса В. Т.е. если А 100К, то В легко будет порядка 1М. Поэтому скорее всего я буду делать как-то так: - класс В разделю на 2: 1. статические элементы, которые будучи один раз прилеплены к А там останутся навеки, пока деструктор ~A не разлучит их. Насколько помню(код на работе) у меня уже был создан класс с эталонными объектами, у которых уникальный Id, и эти иды или хранятся сами в векторе объекта класса А, или ссылки на эти эталонные объекты. Это нормально, потому что 2 идентичных объекта класса В несут одну и ту же информацию, поэтому нет смысла генерить 2 объекта, достаточно помнить Id-ы и их порядок в массиве. 2. динамические элементы, которые могут мигрировать от одного объекта класса А к другому. Их мало совсем. Ладно, это всё уже детали, главный вопрос был про правильность аллоцирования массива с использованием shared_ptr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2016, 18:08
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
[quot СЕМЬ]MasterZivНу как вариант, шарь всё через shared_ptr-ы и не парься. 100 тыщ на 64 битах оно вполне может выдержать.я пока сделал так: вместо make_shared<T> сделал shared_ptr<T>(new T[size], default_delete<T>[]) Так есть же shared_array для этого... или как его там... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.11.2016, 18:08
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
MasterZiv, А ещё можно shared_ptr< verctor <T> > ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.11.2016, 07:02
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
MasterZivshared_arrayесть, но в boost. Хотя, в общем-то, весь проект заводился, чтобы посмотреть, как работает boost::serialization на небольших иерархиях, где используются shared_ptr MasterZivА ещё можно shared_ptr< verctor <T> >Не, это не совсем хороший вариант. В этом случае мы получаем указатель на вектор и, собственно, гарантию, что сам объект вектора, а не его содержимое, будет жив. В моём случае чуть лучше, у меня указатель держит всю область выделенной памяти. Но это тоже неидеально, потому что если я сделаю shared_ptr на один из элементов, это не удержит элемент в памяти, если я удалю сам массив. boost::shared_array не смотрел, возможно он умеет оперировать ссылками всех своих элементов массива, но тогда скорее всего придётся использовать boost-овский shared_ptr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.11.2016, 16:51
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
CEMbMasterZivА ещё можно shared_ptr< verctor <T> >Не, это не совсем хороший вариант. В этом случае мы получаем указатель на вектор и, собственно, гарантию, что сам объект вектора, а не его содержимое, будет жив. Если в векторе хранить по значению, то оно будет всегда живо. Напоминаю, что ранее ты хотел хранить простой массив, в котором всегда всё храниться по значению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.11.2016, 05:55
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
Что-то я запутался. MasterZivЕсли в векторе хранить по значению, то оно будет всегда живо.Вектор - это динамический набор элементов. Допустим, мы храним там значения. Потом берём и делаем shared_ptr на один из элементов, а самому вектору делаем несколько erase(), что будет с созданным shared_ptr? Думаю, он будет ссылаться на битую область (boost::shared_array, видимо, в такой ситуации сначала держал бы 2 ссылки на объект, после erase() одну), при этом и вектор и shared_ptr на него - в порядке. MasterZivНапоминаю, что ранее ты хотел хранить простой массив, в котором всегда всё храниться по значению.я сейчас так и делаю, по той же самой причине: у меня shared_ptr на единый кусок памяти, т.е. не может быть такой ситуации, что shared_ptr на массив живой, а кто-то в массиве дохлый. Но сейчас я вообще убрал пока shared_ptr-ы, ссылающиеся на элементы массива, потому что нестыковка :) Хорошо бы иметь некое подобие weak_ptr в таком случае... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.11.2016, 21:46
|
|||
|---|---|---|---|
shared_ptr и большие динамические массивы |
|||
|
#18+
CEMbЧто-то я запутался. MasterZivЕсли в векторе хранить по значению, то оно будет всегда живо.Вектор - это динамический набор элементов. Допустим, мы храним там значения. Потом берём и делаем shared_ptr на один из элементов, а самому вектору делаем несколько erase(), что будет с созданным shared_ptr? . Ты не можешь так делать. Нельзя. CEMbДумаю, он будет ссылаться на битую область (boost::shared_array, видимо, в такой ситуации сначала держал бы 2 ссылки на объект, после erase() одну), при этом и вектор и shared_ptr на него - в порядке. MasterZivНапоминаю, что ранее ты хотел хранить простой массив, в котором всегда всё храниться по значению.я сейчас так и делаю, по той же самой причине: у меня shared_ptr на единый кусок памяти, т.е. не может быть такой ситуации, что shared_ptr на массив живой, а кто-то в массиве дохлый. Но сейчас я вообще убрал пока shared_ptr-ы, ссылающиеся на элементы массива, потому что нестыковка :) Хорошо бы иметь некое подобие weak_ptr в таком случае... Ну и объясни , чем shared ptr на массив отличается от shared_ptr на вектор, содержащий элемнты по значению. Ничем, только первое недопустимо (кажется по спецификации), второе -- вполне законно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2018373]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
71ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 272ms |
| total: | 461ms |

| 0 / 0 |
