Существует нет языка средство, которое помогает во время компиляции.Но во время выполнения вы можете использовать приведенную ниже технику, чтобы ограничить ее .Предположим, вы не хотите MyObject
в static
области хранения, затем добавьте код в деструктор как:
bool ALLOW_OBJECTS = false; // global variable
struct MyObject // class body
{
~MyObject ()
{
if(ALLOW_OBJECTS == false)
<print error message>
// ...
}
};
Теперь, в вашем методе main()
вы можете иметь ALLOW_OBJECTS
как,
int main ()
{
ALLOW_OBJECTS = true; // objects can be created now
// ... other code
ALLOW_OBJECTS = false; // reset to 'false' before main() ends
}
Теперь факт, что переменные, объявленные в static
хранилище, исчезают из своего времени жизни (вызов деструктора) после завершения main()
.Таким образом, если переменная была объявлена в static
хранилище, ее деструктор выведет сообщение об ошибке (в файле или в stdout).
При этой проверке ваш 1 запуск теста выполнения может завершиться неудачно, но вы можете вручную исправитькод после того, как вы найдете количество сообщений об ошибках.Таким образом, в вашем рабочем коде вы можете удалить все эти операторы отладки, и у вас будет свой код без какого-либо static
объекта хранения !!!(неприменимо для POD и указателей).