Как сказал Чарльз, объект оживает только после того, как он был обновлен, поэтому установка данных в вашей реализации new довольно опасна.
Кроме того, когда ваши разработчики используют такие инструменты, как Lint, возникает большая проблема.вероятность того, что он жалуется на то, что член isOnHeap не инициализирован в конструкторе.Если кто-то подумает: «Эй, Линт прав, давайте инициализируем isOnHeap в конструкторе A», это подорвет механизм, которого вы пытаетесь достичь.
Есть второй случай, который вы, вероятно, не сделалисчитать.Предположим, что кто-то пишет это:
class MyClass
{
public:
...
private:
struct A m_a;
};
int main()
{
MyClass *myVariable = new MyClass();
}
Тогда ваша реализация new не будет вызвана.Тем не менее, экземпляр A размещается в куче (как часть экземпляра MyClass).
Можете ли вы объяснить, почему вы хотите знать, было ли что-то выделено в куче или нет?Может быть, есть другое, более элегантное решение вашей проблемы.