Pull to refresh
1
0
Send message
Потихоньку двигаю своё. Желающие могут повлиять на вектор развития.
Если бы Вы привели пример последнего успешного исправления утечки памяти с выявленными причинами, то можно было бы предметно разобраться, кто виноват, и что (надо было) делать. Если есть непреодолимое желание работать с памятью в С++ самостоятельно, то все средства языка для этого в наличии, как и на заре его появления (я слышал, обычно стреляют себе в ноги). Если не получается, то может и не надо? Используйте более высокоуровневые средства языка.
Повторюсь: на С++ можно писать безопасный код, не обладая невероятной внимательностью и многолетним опытом. Автор, вам стоит немного поинтересоваться актуальными возможностями хотя бы стандартной библиотеки. Маленький пример в качестве вброса (нет явного выделения/освобождения памяти, есть контроль выхода за границы массива):
try {
    auto current_scope_object_ptr = unique_ptr<my_scientific_object>({});
    vector<int64_t> array(100);
    cout << "out of bounds item value: " << array.at(100) << endl;
}
catch (const exception &e) {
    cout << e.what() << endl;
}

В подобных ситуациях проблемы случаются обычно в местах стыковки кода на С и С++, где за вас не завернули С-шный апи в объекты (не будем здесь лезть в дебри по взаимодействию с библиотеками, собранными разными компиляторами с разными настройками). И даже в этих местах стоит использовать типичный подход С++ и чувствовать себя сухо и комфортно. Например, создаем xml-документ с помощью библиотеки libxml2:
unique_ptr<xmlDoc, function<decltype(xmlFreeDoc)>> doc(xmlNewDoc(BAD_CAST("1.0")), xmlFreeDoc);
С-шный объект корректно закончит свое существование в любом случае.
И так далее.
Всё смешали. С и С++ — разные языки. С помощью RAII всегда можно было нивелировать проблемы с доступом к памяти и ее высвобождением, а развитие языка, выраженное в стандартной библиотеке, позволяет даже не напрягаться по этому поводу — всё уже сделано за вас. Уже слишком просто, чтобы продолжать жаловаться на С++ — не помню, когда в последний раз случались подобные сложности с кодом на плюсах, где не задействованы С-шные библиотеки.

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Registered
Activity

Specialization

Backend Developer, Database Developer
C++
PostgreSQL
Tarantool
Golang
Git