Я знаю, что ресурсы, выделенные стеком, освобождаются в обратном порядке, поскольку они были выделены в конце функции как часть RAII. Я работаю над проектом и выделяю много памяти «новым» из библиотеки, которую использую, и тестирую материал. Я не добавил функцию выключения в качестве аналога функции инициализации, которая выполняет все динамическое распределение. Когда вы закрываете программу, я почти уверен, что утечки памяти нет, поскольку выделенная память должна быть освобождена операционной системой. По крайней мере, любая современная ОС, как объясняется в этом вопросе, похожем на мой: динамически выделяемая память после программы прекращение .
Мне интересно две вещи:
1: Существует ли в этом случае определенный порядок высвобождения ресурсов? Имеет ли это какое-то отношение к вашему написанному коду (т. е. к тому, в каком порядке вы его разместили) или это полностью зависит от ОС?
2: Причина, по которой я не сделал функцию отключения, чтобы отменить инициализацию, заключается в том, что я говорю себе, что сейчас просто тестирую материал, я сделаю это позже. Есть ли риск нанести какой-либо ущерб чему-либо, делая то, что я делаю? Худшее, что я могу себе представить, это то, что было упомянуто в ответе на тот вопрос, который я связал, а именно то, что ОС не может восстановить память, и вы получаете утечку памяти даже после выхода из программы.
Я следовал руководству по библиотеке физики Bullet и инициализировал такой код:
pSolver = new btSequentialImpulseConstraintSolver;
pOverlappingPairCache = new btDbvtBroadphase();
pCollisionConfig = new btDefaultCollisionConfiguration();
pDispatcher = new btCollisionDispatcher(pCollisionConfig);
pDynamicsWorld = new btDiscreteDynamicsWorld(pDispatcher, pOverlappingPairCache, pSolver, pCollisionConfig);
И никогда не вызывайте удаление для любого из них в данный момент, потому что, как я уже сказал, я просто тестирую.