Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

std::vector<>

337  1 2 все
  moose старожил25.07.18 15:17
NEW 25.07.18 15:17 

столкнулся с использованием для того, чтобы держать там ОБЪЕКТЫ. не указатели на объекты, не примитивы, а объекты. не могу понять, почему так сделано. для меня выглядит как полное дерьмо. может я чего не знаю или не понимаю? просветите, плз.

#1 
Программист коренной житель25.07.18 15:38
NEW 25.07.18 15:38 
в ответ moose 25.07.18 15:17

Просто кто-то решил не гемороиться с созданием и удалением. Собственно говоря, а зачем, когда есть скоуп и копи-конструктор? :)

#2 
  moose старожил25.07.18 19:28
NEW 25.07.18 19:28 
в ответ Программист 25.07.18 15:38

почему "кто-то" выбрал тогда си++?

#3 
Программист коренной житель26.07.18 07:51
NEW 26.07.18 07:51 
в ответ moose 25.07.18 19:28, Последний раз изменено 26.07.18 07:52 (Программист)

На то может быть много причин:

1) на ANSI C уже давно никто не пишет.

2) когда создаешь новый прокт в студии, его файлы имеют расширение *.h и *.cpp

3) в студии зашита функция создания классов

4) писать на С++ - это требование сверху

5) человек находится в должности "программист на С++"


Короче говоря, для выбора С++, как видишь, может быть масса причин.


Кстати, мое предположение о том, что вектор объектов создается ради того, чтобы избежать утечек памяти - это не шутка :( Мои коллеги (один слава богу уже не программирует... правда руководит :D, а другой в последнее время все больше на C# фигачет) очень не любят указатели и, если возможно, везде вставляют сам объект. Поэтому у нас полно объектов-полей класса :) Ведь иначе ты никак не передашь состояние объекта из одной функции в другую и не вернешь его назад. И официальное объяснение было именно такое - "во избежании утечек памяти".

#4 
Simple Nothing is f*cked26.07.18 11:14
Simple
NEW 26.07.18 11:14 
в ответ moose 25.07.18 15:17

https://stackoverflow.com/questions/141337/should-i-store-...

STL контейнеры по дизайну value based. Еще не так давно в стандарте даже не было нормального smart pointer, приходилось писать свои велосипеды или тащить boost. Надеюсь, тебе не надо объяснять всех прелестей ебли с указателями в C++?

#5 
Simple Nothing is f*cked26.07.18 11:16
Simple
NEW 26.07.18 11:16 
в ответ Программист 26.07.18 07:51

И это вполне нормальное объяснение. Тот, кто когда-то искал утечки памяти в с++-программах, это отлично понимает ;)

#6 
Программист коренной житель26.07.18 11:40
NEW 26.07.18 11:40 
в ответ Simple 26.07.18 11:16

Ну я искал утечки памяти. Не помню, чтобы хоть раз не справился :)


А вот невозможность реализовать dependency injection бесит :D

#7 
Murr_0001 знакомое лицо26.07.18 11:50
Murr_0001
NEW 26.07.18 11:50 
в ответ Программист 26.07.18 11:40

Да ладно... При желании ДИ можно слепить хоть на ПуреС, хоть на асме... хаха

Вопрос затрат, но и только...

#8 
Программист коренной житель26.07.18 11:54
NEW 26.07.18 11:54 
в ответ Murr_0001 26.07.18 11:50, Последний раз изменено 26.07.18 11:56 (Программист)

Да?


Примерчик покажешь? :)

public class SomeClass
{
protected:
    SomeOtherClass m_someOtherClass;
};


Что надо сделать, чтобы подменить m_someOtherClass? :) Начнем с ПуреС :)

#9 
Simple Nothing is f*cked26.07.18 11:58
Simple
NEW 26.07.18 11:58 
в ответ Программист 26.07.18 11:40

Если у тебя, грубо говоря, хелловорлд, то искать просто. А если мультипоточное или мультипроцессное, то можно усраться. Я помню, я даже уговорил шефиню купить какой-то тул за 4-значную сумму.

Но это все лирика. Возвращаясь к теме, нет никакой нужды париться с указателями, если можно все сделать на объектах. Покуда объекты легковесные, можно не беспокоиться, что будет stack overflow ;) Плюсов по скорости тоже не будет особо.

#10 
Simple Nothing is f*cked26.07.18 12:00
Simple
26.07.18 12:00 
в ответ Программист 26.07.18 11:40
А вот невозможность реализовать dependency injection бесит :D

А меня бесит (задним числом) отсутствие такой штуки как maven или gradle :)

#11 
Murr_0001 знакомое лицо26.07.18 12:02
Murr_0001
NEW 26.07.18 12:02 
в ответ Программист 26.07.18 11:54

Начнем с ПуреС :)

-----

Структура, элемент указатель на массив указателей на функции.

Ручную подготовку параметров для вызовов Я пока опущу.


Пойми простую вещь - пока что-то компилируется в асм/код и работает

- его можно имплементить на уровне асм/код... Вопрос только во времени... хаха

#12 
Программист коренной житель26.07.18 12:14
NEW 26.07.18 12:14 
в ответ Simple 26.07.18 11:58

Всякое бывает, я на плюсах уже давно не пишу (сейчас вынужден сопровождать, но новых разработак на плюсах нет).


Ну обмен DTO можно и на объектах, а вот сделать поддающуюся тестированию и/или расширению систему на объектах не получится.

#13 
Программист коренной житель26.07.18 12:15
NEW 26.07.18 12:15 
в ответ Murr_0001 26.07.18 12:02

Ты пальцем покажи.

#14 
Murr_0001 знакомое лицо26.07.18 12:25
Murr_0001
NEW 26.07.18 12:25 
в ответ Программист 26.07.18 12:15

смущ

#15 
Программист коренной житель26.07.18 12:29
NEW 26.07.18 12:29 
в ответ Murr_0001 26.07.18 12:25

я так и знал :D

#16 
Simple Nothing is f*cked26.07.18 15:11
Simple
NEW 26.07.18 15:11 
в ответ Программист 26.07.18 12:14

Все получится :) Просто подходить к этому следует по-другому, чем в Java или .NET :)

#17 
Программист коренной житель26.07.18 16:07
NEW 26.07.18 16:07 
в ответ Simple 26.07.18 15:11

Заинтриговал :) А где этот хитрый подход? :)

#18 
Simple Nothing is f*cked26.07.18 16:13
Simple
NEW 26.07.18 16:13 
в ответ Программист 26.07.18 16:07

Я уже сто лет с++ не пользовался, не мучай :)

#19 
Программист коренной житель26.07.18 16:42
NEW 26.07.18 16:42 
в ответ Simple 26.07.18 16:13

Так и я о том, что других вариантов нет :D

#20 
1 2 все