В настоящее время я застрял в очень специфической проблеме. У меня есть map
из структур нравится:Проверить экземпляр созданного элемента структуры
std::map<int, MyStruct> myMap;
typedef struct
{
long a;
int b;
MyObject* object;
} MyStruct;
О создании структур object
всегда установлен в nullptr
:
void createNewStruct(int id)
{
MyStruct newStruct{2L, 1, nullptr}; // create with no object
myMap.insert(std::pair(id, newStruct)); // store in map
}
Я делаю это потому, что я, возможно, тысячи структур в map
, но только немногим может понадобиться фактический «объект», который сам по себе довольно большой.
Сам по себе object
имеет ограниченный срок службы, и он должен показать, если он в настоящее время не показан, и не отображается, если он отображается в данный момент. Если окончание срока службы объектов достигается она называет остановки (это):
void doShow(int id)
{
if(myMap[id].object == nullptr)
{
MyObject* newObject = new MyObject();
connect(object, SIGNAL(stopped(MyObject*), this, (objectStopped(MyObject*)); // create callback to delete object later
myMap[id].object = newObject;
// do something with object
}
}
Теперь, если остановлен (это) называется я пытаюсь очистить:
void objectStopped(MyObject* object)
{
// do something with object
delete object;
object = nullptr; //????
}
Но очевидно, что это не работает как предполагалось, потому что проверка на nullptr
больше никогда не будет правдой.
Так что я хочу, чтобы достичь является: У меня есть map
с большим количеством структур, но лишь немногие из этих структур нуждаются в object
. Как я могу правильно создать и удалить этот объект?
Спасибо за этот намек.Я мысленно застрял в: 'Объект * a = 0x02; Объект * b = a; a = nullptr; b = 0x02; // все еще указывает – xuckz