powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ещё несколько вопросов начинающего программиста
10 сообщений из 60, страница 3 из 3
Ещё несколько вопросов начинающего программиста
    #38061003
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с shared_ptr,

Код: plaintext
1.
... + boost::lexical_cast<std::string>(__LINE__) + ...
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061341
Anatoly Moskovskyвариант с shared_ptr,

Код: plaintext
1.
... + boost::lexical_cast<std::string>(__LINE__) + ...


Это то да, стандартное универсальное решение.
А проще нет?
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061367
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с shared_ptr,

я не понял, вот это имелось в виду?
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061403
Mozokвариант с shared_ptr,

я не понял, вот это имелось в виду?
Да :)
В GCC по крайней мере вот так:
Код: plaintext
1.
2.
3.
4.
#define xstr(s) str(s)
#define str(s) #s
     
#define THROW_PLACE std::string() + __FILE__ + ": " + xstr(__LINE__) + ": " + __DATE__ + " " + __TIME__ + ", " + __FUNCTION__ + ": "
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061656
Anatoly MoskovskyОткладывать логирование до поимки и потом tot ловить ... это антипаттерн (даже два).

Код: plaintext
1.
2.
3.
4.
5.
    try {
        THROW_PLACE(std::runtime_error, message);  // раскрывается в {log(message + place); throw std::runtime_error(message + place);}
    } catch(std::runtime_error&) {
        ...
    }


А чем хуже или лучше вариант с логированием исключений следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
#include <iostream>
#include <string>
#include <stdexcept>

#define xstr(s) str(s)
#define str(s) #s
#define THROW_PLACE std::string() + __FILE__ + ": " + xstr(__LINE__) + ": " + __DATE__ + " " + __TIME__ + ", " + __FUNCTION__ + ": "


struct log_exception : exception {
    log_exception(std::string const& msg) : exception(msg) {
        log(msg);
    }
}

struct nolog_exception : exception {
    nolog_exception(std::string const& msg) : exception(msg) {
        show_message(msg);
    }
}

struct critical_exception : log_exception {
    critical_exception(std::string const& msg) : log_exception(msg) { }
}

struct lost_packet_exception : nolog_exception {
    lost_packet_exception(std::string const& msg) : nolog_exception(msg) { }
}


void func() {
    try {
        // ...
        std::throw(critical_exception(THROW_PLACE + "crush data file"));    // is logged
        // ...
    } catch (critical_exception const& ) {
        
    }
    
    
    try {
        // ...
        std::throw(lost_packet_exception(THROW_PLACE + "connection failed"));   // not is logged
        // ...
    } catch (lost_packet_exception const& ) {
        
    }    
    
}
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061758
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с shared_ptr,

Из конструктора предка лучше не логировать, т.к. там виртуальная what() наследника еще недоступна.
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061783
Anatoly Moskovskyвариант с shared_ptr,

Из конструктора предка лучше не логировать, т.к. там виртуальная what() наследника еще недоступна.
А яж сообщение не из what() беру, а непосредственно из параметра конструктора, или желательно брать из what()?
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061820
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с shared_ptr,

Это конечно вам решать как это делать.
Но, это вы сейчас не вызываете виртуальных ф-й в конструкторе, а кто после вас с этим кодом будет работать неизвестно.

Ну и если вы наследуете от std::exception то надо наверно как минимум предоставлять реализацию what().
Я бы исключения с сообщениями наследовал от std::runtime_error - там уже есть реализация what() которая берет сообщение из аргумента конструктора.
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38061987
ayvango
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YathaИнтересно, зачем удалять указатели? Обычно они определяются, как переменные и обнуляются после удаления объекта.
Под удалением я имел ввиду применение оператора delete для удаления объектов, на который они указывают.
Так нужно ли применять delete f, если f -- указатель на функцию?

P.S. спасибо всем ответившим на вопросы. Некоторые из них остались без ответа, если что -- пишите.
...
Рейтинг: 0 / 0
Ещё несколько вопросов начинающего программиста
    #38062063
не нужно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ayvangoYathaИнтересно, зачем удалять указатели? Обычно они определяются, как переменные и обнуляются после удаления объекта.
Под удалением я имел ввиду применение оператора delete для удаления объектов, на который они указывают.
Так нужно ли применять delete f, если f -- указатель на функцию?

P.S. спасибо всем ответившим на вопросы. Некоторые из них остались без ответа, если что -- пишите.
Нет, не нужно. Потому что создать динамически экземпляр функции не возможно.
...
Рейтинг: 0 / 0
10 сообщений из 60, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ещё несколько вопросов начинающего программиста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]