Как получить вызывающий объект конкретного конструктора?

Я знаю, что упаковка с макросом может использоваться для получения вызывающего абонента функции. Но когда речь идет о конструкторах, это, насколько я знаю, невозможно. Я не использую gcc, поэтому функция backtrace () не является для меня опцией.

Редактировать:
Я использую msvc.

1 ответ

  1. Идеальным инструментом для этого является отладчик, который не требует внесения каких-либо изменений в программу.

    Однако, если вы действительно хотите получить вызывающего абонента локально в программе, это также возможно — но не в стандартном C++ без использования специфичных для платформы или оберточных библиотек (за исключением изменения конструктора и использования трюка макроса).


    Я не использую gcc, поэтому функция backtrace () не является для меня опцией.

    Затем вам нужно будет выяснить, какой компилятор вы используете, и использовать любую альтернативу, которую они предоставляют для размотки стека.

    Существует портативная библиотека libunwind, которую вы можете использовать, которая работает без доступа к backtrace. Однако он не портирован на windows.


    Я знаю, что упаковка с макросом может использоваться для получения вызывающего абонента функции

    Обертывание инициализации должно работать аналогичным образом.