2013-11-04 2 views
2

나는 QString 키를 가진 QMap과 myclass의 Object 값 포인터를 가지고있다.QMap에서 포인터를 삭제 하시겠습니까?

QMap<QString, myClass*> types; 

myClass *type = types.value(typeKey); 
    if (!type) { 
     type = new myClass; 
     types.insert(typeKey, type); 

가 어떻게이 키를 사용하여 포인터를 삭제한다하지만 내가 동적으로 QMap의 값을 할당 할 때 QMap에서 포인터를 삭제하는 방법을 몰라? remove과 같은 QMap 메서드를 알고 있습니다. 그게 안전할까요? 다음에 대한

무엇 :

const QString key = types.key(static_cast<myClass*>()); 
    types.remove(key); 

답변

7

remove() 기능은 스스로를해야 할, 그래서는 개체에 대한 포인터 인 경우 그러나, 그것은 삭제되지 않습니다지도에서 항목을 제거합니다. 나는 다음과 같은 방법으로 그렇게 할 것입니다 :

QMap으로
myClass *type = types.take("foo"); 
delete type; 
1

이 :: 포인터를 삭제하지 않습니다 명확 qDeleteAll 기능을 수행하는 또 다른 방법이있다. qDeleteAll은 QMap 및 QHash의 경우에만 값에서 작동하며 포인터 유형 인 경우에도 작동하지 않으므로 아래 예제는 kay 값 컨테이너의 값에서만 작동합니다. 이 값은 포인터 유형이어야합니다.

QMap<int,Employee *> mlist; 
mlist.insert(1,new Employee("Blackpool", "Stephen")); 
mlist.insert(2,new Employee("Twist", "Oliver")); 

qDeleteAll(mlist); 
#or you can do it like 
qDeleteAll(mlist.begin(),mlist.end()); 
관련 문제