Упрощенный надрез моего класса:Можете ли вы запретить вызов конструктора без создания экземпляра?
class UpdatingSystem
/* when system is "unsafe" it marks this condition by instantiating an
UpdatingSystem item. While this item exists errors are handled in a
particular way. When the UpdatingSystem item goes out of scope error
handling reverts to normal.*/
{
private:
static THREAD int updatingSystemCount_;
public:
UpdatingSystem(const char* caller){updatingSystemCount++};
~UpdatingSystem(){updatingSystemCount--};
};
Это работает:
{
UpdatingSystem tempUnsafe("Reason it's unsafe");
// do stuff that requires the system be 'unsafe'
} // Revert to safe when destructor runs
Это не:
{
UpdatingSystem("Reason it's unsafe");
// do stuff that requires the system be 'unsafe'
}
... потому что вызываемый конструктор создает временный элемент, и деструктор немедленно запускается, оставляя систему «безопасной», когда ее не должно быть.
Легко совершить ошибку при написании второй, неисправной версии. Есть ли способ предотвратить такой вызов конструктора без создания экземпляра?
Невозможно предотвратить это, нет. C++ позволяет анонимные временные файлы, вы ничего не можете с этим поделать. –
Нет, класс не знает, что объект сохраняется в lvalue. –
Я знаю, что я удалил его, мисс прочитала вопрос :) его рано еще с кофе :) – Rob