РЕДАКТИРОВАТЬ : Подождите ... Я не понял, что эта функция является членом класса CXFileEntity. Это тоже не похоже на статический метод. Поэтому для вызова этой функции вам уже нужно создать экземпляр объекта CXFileEntity! Поэтому вполне вероятно, что вы абсолютно не хотите ни удалять, ни создавать объекты CXFileEntity внутри этого метода. (Если вы действительно позволяете существовать только одной сущности одновременно, вы будете эффективно удалять «this», а затем пытаться воссоздать его. Это не работает, ни в коем случае, ни как.)
Я оставляю более ранний ответ на месте в надежде, что он все еще даст вам некоторую подсказку о том, как работают указатели.
Вы бы лучше предоставили больше информации, например, , где и , как , программа ломается.
Но это явно не так:
CXFileEntity *entity,
потому что это означает, что новый объект выделен на
entity=new CXFileEntity(d3ddev);
абонент не увидит. (сущность является локальной переменной, поэтому изменения в ней не будут видны за пределами локальной области видимости.)
Попробуйте изменить код для передачи объекта в качестве указателя на указатель:
CXFileEntity **entity,
, что будет означать изменение кода внутри функции для соответствия:
if (*entity)
{
delete *entity;
*entity=0;
}
// Create the entity
*entity=new CXFileEntity(d3ddev);
// etc.
Вам также придется изменить вызывающего абонента, чтобы передать указатель на указатель. И ради всего святого, убедитесь, что при первом вводе указателя он инициализируется значением 0:
CXFileEntity *the_entity = 0;
...