C/C++

Доверяете ли вы создателю языка С++ господину Страуструпу?

Если доверяете, то купите его книгу ЯЗЫК С++ СПЕЦИАЛЬНОЕ ИЗДАНИЕ. Откройте страницу 180 и внимательно осознайте КАК должна строиться работа с динамическим выделением памяти и не гоните ХНЮ, пожалуйста. Интересует мнение заядлых двоечников и "спецов" с высшим образованием
Kurmangazy Segizbayev
Kurmangazy Segizbayev
21 700
Юра Панько
Юра Панько
8 214
Лучший ответ
Kurmangazy Segizbayev издание 2010 от БИНОМ РФ там как раз глава 6.2.6.2 Исчерпание памяти
Kurmangazy Segizbayev ты хотя бы страничку привёл ради прикола ))
Ещё у C++ имеется богатая стандартная библиотека шаблонов, которая позволяет писать безопасный код не прибегая к ручному выделению динамической памяти и каждый уважающий себя разработчик должен пользоваться её потенциалом.

#include <iostream>
#include <memory>
using namespace std;
int main() {
size_t n = 1000000000;
try {
auto box = shared_ptr<int[]>(new int[n]);
for (auto i = 0U; i < n; ++i) box.get()[i] = i + 1;
for (auto i = 0U; i < n; ++i) cout << box.get()[i] << ' ';
cout.put('\n');
} catch(const bad_alloc& ba) {
cerr << ba.what() << '\n';
}
system("pause > nul");
}
Kurmangazy Segizbayev Понятно и без слов. Потому и советует страуструп тот же не трогать динамику, а изучать STL... Тем не менее если есть NEW и DELETE, то делать правильно сам Бог велел? Зачем поощрать тупизну!?
Мне как-то все равно: доверяю или нет.
Тут или пользуйся или создавай свое. А то есть личности, то сначала пользуются системами, а затем жалуются на создателей, говоря, что слишком высока цена. Ну так создавали бы свое. Защищали бы свое.
Kurmangazy Segizbayev так я прошу всех почитать того человека, который учит пользоваться языком не только двоечников, но и тех, кто знает, но молчит. Ищи книгу и смтри страницу 180. Там для НЕДОУМКОВ объясняется зачем нужна правильная работа с NEW и DELETE
Не хочу покупать, так что и ответить тебе никто не сможет. У каждого человека за жизнь может и мнение изменится, так что мое сегодняшнее ДА, завтра может быть НЕТ
Kurmangazy Segizbayev ты прямо как кличок старший - сильно умный
Нет, не доверяю.
Когда сам Страуструп в интервью говорит, что "любит программировать только в Windows", становится ясно, с какой команды он вышел.
Все его "советы" в любой области - это лохотрон от торгаша.
Доверять не стоит.
И кто конкретно писал "его" C++, уже не ясно. ;)
Andrei Cherniaev
Andrei Cherniaev
37 945
Kurmangazy Segizbayev в его же книге, как и от Шилдта обязаны проверять выделение памяти и почему здесь откровенно поощряют ХНЮ не понятно
Скачиваем бесплатно (например с VK) эту книгу Страуструпа "Специальное издание" издательства "Бином". 6.2 там будет на страницах 170-171. Воспользуемся "инспектор"-тестом, то есть напишем код для первой же попавшейся Системы программирования на C++. Вот что я запускаю со своего таблета на платформе Android:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int i, n;
for (;;)
{
cout << "n » ";
cin >> n;
try
{
double *a = new double [n];
for (i = 0; i < n; i++) a[i] = i + 1;
cout << a[n - 1] << endl;
delete [] a;
}
catch (bad_alloc) { cerr << "No memory\n"; }
}
}
Всего памяти ОЗУ на этом таблете примерно в два раза больше максимальной рабочей памяти, выделяемой Системой программирования под конкретную задачу, в которую и гигабайт-то кое-как влезает. Вводим требуемое количество восьмибайтных чисел равным, скажем, 200000000 и, конечно же, ничего у нас толком не перехватывается и никакая диагностика в виде No memory при этом не выдаётся, а задача просто слетает с решения. Может, на каком-нибудь Windows всё и работает, как о том в книжке написано, но зато в первой же попавшейся Системе программирования, как показывает опыт, - нет. Вот и верь после этого всяким там книжонкам!.
(◔‿◔)
Kurmangazy Segizbayev солнце моё, вы делаете вектор динамический, а разговор про двухзвёздочный коньяк когда в цикле выделяется память построчно и в случае невыделения памяти в середине цикла!!!! Да я сколько раз получал предупреждение от нормально написанных программ ЗАКРЫТЬ все ненужные программы и повторить запуск приложения, что... ЧЕГО ОБЪЯСНЯТЬ ЛЮДЯМ С ВО ???Поздно объяснять уже )))
Kurmangazy Segizbayev double *a = new double [n];
a= NULL; сейчас попробуем смоделировать невыделение памяти для линейного массива, а в случае матрицы это сбой скажем в середине создания массива и АВАРИЙНЫ ВЫХОД ИЗ ПРОГРАММЫ, А НЕ ВОЗВРАТ СТАНДАРТНОГО И УМНОГО NULL для организации сборки мусора и т. д.
Kurmangazy Segizbayev a= NULL выбрасывает программу аварийно... Хорошо в первой строке, а в 10 из 11??? в 99999 из 100000 double или class какой-нибудь???
Kurmangazy Segizbayev Кстати в сибилдере ОБЯЗАТЕЛЬНО try catch и в деструкторах предусмотрены пварийные удаления памяти. Как и в STL всё в порядке с памятью, о чём тут Н. Веселуха говорил. Но смысл в чём - если просят динамику, то почему никто об этом даже не заикается? Ни преподы, ни местные мэтры??? Вот в чём вопрос
Kurmangazy Segizbayev Тем более нужно иможно для обработки таких ситуаций создавать свой обработчик и там уже рисовать и удалять всё что хочешь. Так что проблема с обучением ого-го. А раз задают такие задачки, то и объяснять нужно правильно! Мне один малый указал на некорректное завершение программы и я это запомнил на всю жизнь, что и помогать нужно правильно, а то вся сеть забита клонами ГОВНОКОДА ОТ МЭТРОВ (((