No video

Лекция 46. Внутреннее устройство shared_ptr и weak_ptr

  Рет қаралды 2,978

Мещерин Илья

Мещерин Илья

Күн бұрын

Пікірлер: 14
@grigoriy_hacker
@grigoriy_hacker 4 ай бұрын
Сначала я думал, что хорошо знаю C++. Просмотрев этот канал я понял, что нихера не знаю💀
@mexxxal
@mexxxal 4 ай бұрын
У меня так тоже было год назад
@gooldenboy666
@gooldenboy666 14 күн бұрын
Почему в shared_ptr, отстуствует кастомный Deleter?
@kondius
@kondius 11 күн бұрын
1:19:58 В конструкторе копирования несколько ошибок.
@morskaya_svinka
@morskaya_svinka 13 күн бұрын
21:46 std::shared_ptr p(new int(5)); auto p2 = p; p2 = new int(8); Так незя, no operator "=" matches these operands
@sidneyfarber8254
@sidneyfarber8254 4 ай бұрын
Начал сегодня смотреть реализацию умных указателей двухлетней давности, отошёл чай налить, а тут контент вон какого плана пожаловал... 0_0
@user-qq8wz3uw6w
@user-qq8wz3uw6w 21 күн бұрын
Если мы используем make_shared чтобы одним махом создавать и счетчики и объект, а потом создали weak_ptr, а потом при обнулении shared_count вызвали вручную деструктор объекта, то как мы избежим вызова деструктора второй раз при удалении контрольного блока, содержащего и счетчик и объект ?
@warpjump998
@warpjump998 14 күн бұрын
внутри контрол блока лежит не сам объект, а массив чаров размера и выравнивания как объект
@FeelUs
@FeelUs 4 ай бұрын
Зачем вообще создавать одиночный объект в динамической памяти? Мы либо создаём объект на стеке* и работаем с ним как с данными, Либо пишем свой контейнер, который управляет владением объектов. * Исправил стене на стеке
@user-qu7vl6vo4q
@user-qu7vl6vo4q 4 ай бұрын
К чему этот вопрос? Будешь писать свои контейнеры и специализировать под работу с указателями, чтобы в деструкторе всё освобожалось, а зачем? Можно написать обобщённый контейнер вне зависимости от типа данных и принять тот же враппер вокруг обычного указателя (например unique_ptr).
@FeelUs
@FeelUs 4 ай бұрын
​@@user-qu7vl6vo4qне понял что куда принять. Предположу что имелось ввиду "применять". Кароче, если бы я реализовывал stl-вские контейнеры, я бы внутри использовал обычные указатели (на обобщенный тип, который шаблонный параметр), а не умные указатели.
@user-qu7vl6vo4q
@user-qu7vl6vo4q 4 ай бұрын
@@FeelUs имел ввиду принять как шаблонный параметр типа. Все равно не понимаю вашу идею. Stl контейнеры в себе не содержат умных указателей. Все контейнеры используют внутри себя обычные сишные указатели
@FeelUs
@FeelUs 4 ай бұрын
@@user-qu7vl6vo4q мне не понятно, когда стоит применять умные указатели. Потому что я объекты храню Либо на стеке Либо в контейнере. А при реализации контейнеров используются обычные указатели.
@FeelUs
@FeelUs 4 ай бұрын
да, в интересной последовательности удаляются контрол-блоки: struct Node { weak_ptr wp; } int main() { shared_ptr p1 = new Node; // p1.control_block->shred_count = 1 shared_ptr p2 = new Node; // p2.control_block->shred_count = 1 p1->wp = p2; // p2.control_block->weak_count = 1 p2->wp = p1; // p1.control_block->weak_count = 1 // десруктор p1 // p1.control_block->shred_count = 0 // деструктор Node(1) // деструктор wp // p2.control_block->weak_count = 0 // (*p1.control_block) остается жив, p1.control_block->weak_count == 1 // деструктор p2 // p2.control_block->shred_count = 0 // деструктор Node(2) // деструктор wp // p1.control_block->weak_count = 0 // деструктор (*p1.control_block) // деструктор (*p2.control_block) }
Лекция 44. Deducing this. CTAD. Structured bindings, tuples
1:10:59
Мещерин Илья
Рет қаралды 2 М.
КАК УСТРОЕН TCP/IP?
31:32
Alek OS
Рет қаралды 54 М.
Лекция 48. SFINAE, std::enable_if
1:22:23
Мещерин Илья
Рет қаралды 1,8 М.
Лекция 49. Реализация type_traits с помощью SFINAE
1:06:17
Мещерин Илья
Рет қаралды 1,4 М.
Лекция 42. Expired values. Copy elision. Return value optimization
1:14:36
Мещерин Илья
Рет қаралды 1,9 М.