Когда деструктор временного объекта называется [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Когда деструктор временного объекта называется [дубликат]

Сообщение Гость »


В моей кодовой базе много таких операторов журналирования:

struct Foo { целое значение = 0; std::string toString() { return std::format("Foo({})", value); } }; Фу-фу; log("Мой журнал: %s", foo.toString().c_str()); Мне это кажется небезопасным, поскольку я ожидаю следующей последовательности операций:
[*]toString() возвращает std::string Вызывается [*]c_str(), возвращающий необработанный указатель char*. [*]Вызывается деструктор строки, освобождающий память, на которую указывает char*. [*]Функция журнала вызывается с использованием теперь недопустимого указателя char*.
...однако на практике я ни разу не видел ошибок с этим кодом, в том числе при включении TSAN/ASAN. Это говорит о том, что код безопасен и происходит правильное действие, поэтому нет необходимости менять код. Является ли поведение, которое я наблюдаю, действительно ожидаемым/требуемым поведением, указанным в стандарте C++?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»