Pull to refresh
272
0
Send message
Мы жаждем подробностей, кусок чьей территории присоединила к себе УССР с помощью регулярной армии.

P.S.: я даже не буду указывать вам на то, что УССР — это не страна ;)
Ах «концептуально»… Ну-ну :)

>… количество лет слабо коррелирует с глубиной знаний. Я глубоко сожалею, что вы этого не понимаете.

Вы бы лучше «глубоко сожалели» о том, что ведетесь на подобные очевидные провокации с моей стороны :D
>Ответ на ваш вопрос — «да».

Что «да»? При выходе из области видимости вызываются «деструкторы указателей» (ну и примитивов заодно)? Нда… Вопрос с подковыркой: а это только в С++ так, или в С тоже? ;)

>Спасибо, я буду работать над своей способностью объяснять вещи

Если бы вы изначально выбрали одну тему, то вам без труда удалось бы «объяснить» мне то, что вы хотели. Тем более что «объяснять» долго не пришлось бы — я с предметной областью какбэ слегка знаком (ну как «слегка» — всего-навсего полтора десятка лет). А объяснить у вас ничего не получилось потому, что вас постоянно болтает то туда, то сюда. Такое ощущение, что вы сами до конца не определились, что именно вы хотите «объяснить». Так что если хотите поработать над какой-нибудь способностью, то для начала поработайте над способностью держаться одной темы разговора, не перескакивая на смежные.

Кстати, за примерами далеко ходить не надо: как только появился более-менее внятно сформулированный тезис, я тут же с ним «согласился», как вы выражаетесь.

>К сожалению я не могу продолжать общение в таком тоне

Я это где-то уже слышал… Вы как «англичанин наоборот»: они уходят не прощаясь, а вы прощаетесь — но не уходите.
Ну да, ну да, мы же именно о таких объектах всю дорогу разговаривали. И деструкторы у указателей тоже вызываются при выходе из области видимости, да? :)

Я повторю вопрос, который уже задавал: вас так и будет постоянно кидать в разные стороны? И вообще вы вроде бы уже попрощались… ;)
Действительно, подвох оказался там, откуда не ждали: в терминологии! :)
Да, без локальных «объектов» типа «указатель» или «примитив» программу написать будет сложновато.

А чего с указателями заморачивались в примере-то? Могли бы проще написать

void f()
{
    int i = 0;
}
>Mezomish, попробуйте написать код, использующий только объекты в куче.

Я даже не знаю, с какой стороны начинать искать подвоха…

Ну да ладно, всего хорошего так всего хорошего.
Видимо, мы с вами друг друга не поняли. Под «дополнительным кодом» я имел в виду «что-то помимо delete».

Нет, удобства объектов на стеке на чистом С получить не выйдет.
Пример показать не могу — код не мой, и писАлся несколько лет назад. Но хаков там было много, да. И, разумеется, по доброй воле я такой использовать не стал бы, а взял бы С++.

Любой вопрос «зачем?» — это вопрос каждой отдельной ситуации. Иногда вопрос «зачем на С, когда можно на С++» оправдан, иногда оправдан противоположный. Но с такими вопросами можно зайти очень далеко :)
Опа, в тред врываются объекты на стеке! А где вы раньше с ними были? Почему мы всю дорогу говорили только о куче (о чём недвусмысленно намекало упоминание «delete» на протяжении всего треда)? Вас так и будет постоянно кидать в разные стороны?
«Пример кода» находится под NDA, т.к. писалось на заказ. Вам правда нужен именно пример кода, объяснения общего принципа будет недостаточно?

Вкратце: «объект» представляет собой, разумеется, структуру. Структура содержит указатель на виртуальную таблицу, в которой есть в том числе и указатель на «деструктор». Виртуальная таблица заполняется указателями на нужные функции (в том числе и на «деструктор») при создании объекта, и у каждого «класса» деструктор будет свой. Общая для всех функция «delete()» тупо ищет указатель на «деструктор» в заранее известном месте и вызывает его. Таким образом для объекта каждого «класса» будет вызван свой собственный деструктор, при том, что пользователь вызывал одну и ту же функцию «delete()».
Я в свою очередь хочу до вас донести, что компилятор «сам вызовет деструктор» только после того, как этот объект кто-то явно отправит на удаление при помощи оператора delete («кто-то» — это либо пользователь сам, либо какой-нибудь смарт-поинтер, либо любой другой механизм [полу]автоматического сбора мусора). И это ничем не лучше того, что при определённом желании реализуется на чистом С, заменяя оператор delete на функцию delete().

И нет, пользователю не нужно будет писать никакого дополнительного кода — для него всё делается совершенно незаметно.
Ну так компилятор — это ведь ни разу не тот случай, когда важен размер бинарника и рантайма, верно? Ну и что он тогда делает в ветке, где мы обсуждаем ситуации, когда эти размеры критичны? ;)
Стоп-стоп, вы же говрили, что компилятор сам всё вызовет? А тут вдруг предлагаете смарт-поинтеры, да еще из стандартной библиотеки с шаблонами, которую сами же советовали не использовать, а делать всё вручную. Вы уж определитесь, что ли…

И я, похоже, «действительно расскажу нечто для вас новое», но на С смарт-поинтеры реализуются ничуть не хуже, чем на плюсах.
>И, да, «просто не забудь вызвать delete». Пока вы тренируете память, компиляторы С++ это делают сами.

Ух ты, компилятор C++ сам за меня вызовет «delete pObject;»? Фигасе новости! :D

А когда будете отвечать на этот вопрос, не забудьте рассказать, чем так кардинально отличается обязательный вызов «delete pObject» от обязательного вызова «delete(pObject)».
>На С эту идиому не реализовать никак.

Вы бы поосторожнее с такими заявлениями…

Я в своё время писал библиотечку на С, предоставляющую возможности ООП со всеми делами: с инкапсуляцией, наследованием, виртуальными функциями и, не поверите, деструкторами, которые работали вполне корректно. Понятное дело, что это был сплошной «закат солнца вручную» и куча магии с указателями, но от пользователя это было полностью скрыто; он просто вызывал delete(pObject), который корректно освобождал нужные ресурсы.
>Расскажите зачем С с макросами там, где подошёл бы С++?

Расскажите зачем C++ там, где подошёл бы C с макросами ;)
Стоп, минуточку. Откуда у нас внезапно появились шаблоны? Шаблоны — это детали реализации контейнеров и строк в STL (и всего остального в Boost). У автора всё это реализовано по-другому. С чего бы ему тащить шаблоны?

И чем вам размер бинарника — не существенная причина?
А как насчёт сразу повысить цену на 10% и таки сделать партию? В конце концов для покупателей $20 или $22 — разница небольшая. Вы в конце месяца останетесь при своих $20 за штуку, а мы останемся при девайсах. По-моему лучше так, чем совсем никак.
Вы когда-нибудь видели, как распухает плюсовый бинарник, когда начинаешь использовать STL (не говоря уже о Boost)?
>оказывается, чиновники пока просто не готовы

Хм, а когда их это останавливало? Когда приняли закон об уведомлении о втором гражданстве, тоже никто ни хрена не знал, кто и как будет принимать эти уведомления. В итоге закон вступил в силу в начале августа, а процедуры уведомления ещё не было.

Information

Rating
Does not participate
Location
Ottawa, Ontario, Канада
Registered
Activity