std::vector<>
столкнулся с использованием для того, чтобы держать там ОБЪЕКТЫ. не указатели на объекты, не примитивы, а объекты. не могу понять, почему так сделано. для меня выглядит как полное дерьмо. может я чего не знаю или не понимаю? просветите, плз.
Просто кто-то решил не гемороиться с созданием и удалением. Собственно говоря, а зачем, когда есть скоуп и копи-конструктор? :)
На то может быть много причин:
1) на ANSI C уже давно никто не пишет.
2) когда создаешь новый прокт в студии, его файлы имеют расширение *.h и *.cpp
3) в студии зашита функция создания классов
4) писать на С++ - это требование сверху
5) человек находится в должности "программист на С++"
Короче говоря, для выбора С++, как видишь, может быть масса причин.
Кстати, мое предположение о том, что вектор объектов создается ради того, чтобы избежать утечек памяти - это не шутка :( Мои коллеги (один слава богу уже не программирует... правда руководит :D, а другой в последнее время все больше на C# фигачет) очень не любят указатели и, если возможно, везде вставляют сам объект. Поэтому у нас полно объектов-полей класса :) Ведь
иначе ты никак не передашь состояние объекта из одной функции в другую и не вернешь его назад. И официальное объяснение было именно такое - "во избежании утечек памяти".
https://stackoverflow.com/questions/141337/should-i-store-...
STL контейнеры по дизайну value based. Еще не так давно в стандарте даже не было нормального smart pointer, приходилось писать свои велосипеды или тащить boost. Надеюсь, тебе не надо объяснять всех прелестей ебли с указателями в C++?
И это вполне нормальное объяснение. Тот, кто когда-то искал утечки памяти в с++-программах, это отлично понимает ;)
Ну я искал утечки памяти. Не помню, чтобы хоть раз не справился :)
А вот невозможность реализовать dependency injection бесит :D
Да ладно... При желании ДИ можно слепить хоть на ПуреС, хоть на асме...
Вопрос затрат, но и только...
Да?
Примерчик покажешь? :)
public class SomeClass { protected: SomeOtherClass m_someOtherClass; };
Что надо сделать, чтобы подменить m_someOtherClass? :) Начнем с ПуреС :)
Если у тебя, грубо говоря, хелловорлд, то искать просто. А если мультипоточное или мультипроцессное, то можно усраться. Я помню, я даже уговорил шефиню купить какой-то тул за 4-значную сумму.
Но это все лирика. Возвращаясь к теме, нет никакой нужды париться с указателями, если можно все сделать на объектах. Покуда объекты легковесные, можно не беспокоиться, что будет stack overflow ;) Плюсов по скорости тоже не будет особо.
А вот невозможность реализовать dependency injection бесит :D
А меня бесит (задним числом) отсутствие такой штуки как maven или gradle :)
Начнем с ПуреС :)
-----
Структура, элемент указатель на массив указателей на функции.
Ручную подготовку параметров для вызовов Я пока опущу.
Пойми простую вещь - пока что-то компилируется в асм/код и работает
- его можно имплементить на уровне асм/код... Вопрос только во времени...
Всякое бывает, я на плюсах уже давно не пишу (сейчас вынужден сопровождать, но новых разработак на плюсах нет).
Ну обмен DTO можно и на объектах, а вот сделать поддающуюся тестированию и/или расширению систему на объектах не получится.
Все получится :) Просто подходить к этому следует по-другому, чем в Java или .NET :)
Я уже сто лет с++ не пользовался, не мучай :)