map<long long, vector<SoundInfo *> > DataCenter::getCopySoundListMap(){
lock();
map<long long, vector<SoundInfo *> > copyMap(m_soundListMap);
unLock();
return copyMap;
}
我有这种方法。它制作地图的副本并返回副本。
我这样称呼这个方法
map<long long, vector<SoundInfo *> > copyMap = DataCenter::getInstance()->getCopySoundListMap();
在功能结束后完成它之后,我做了类似的事情
delete copyMap;
它抱怨这不是一个指针..我知道这不是一个指针然后我想知道什么时候复制的地图的实例将被释放。
提前致谢...
答案 0 :(得分:2)
它是一个局部变量,因此当它超出范围时会被释放...也就是说,当它内部的{
... }
阻挡到达}
时。无论是函数作用域,for
还是while
循环,只是一个任意阻塞的语句组都无关紧要......在该块中引入的变量最后会调用它们的析构函数。映射对象本身的内存来自堆栈,并被回收以供其他变量使用,可能是来自其他函数的本地变量。该映射对象 - 虽然非空 - 也会有指向堆内存的指针,它们将在销毁期间被释放。