好友内存管理+容器
容器有自动内存管理机制。 使用复制构造函数插入值并删除值时,将为每个值调用析构函数。 在读取了元素的no后,将调用哪个stage desctuctor?
当元素读取未被擦除时,容器类如何处理内存?
非常感谢
好友内存管理+容器
容器有自动内存管理机制。 使用复制构造函数插入值并删除值时,将为每个值调用析构函数。 在读取了元素的no后,将调用哪个stage desctuctor?
当元素读取未被擦除时,容器类如何处理内存?
非常感谢
容器没有内存管理,对象有内存管理。
obj a;
{
std::vector<obj> b;
b.push_back(a);//copy of 'a' taken here
}//copy of 'a' in vector destructed here because the copy goes out of scope not specifically the vector
//'a' still exists
或者
obj* a = new obj;
{
std::vector<obj*> b;
b.push_back(a);
b.push_back(new obj);//pointer of type obj taken here
}//obj destructor not called
//got a memory leak as the obj created still exists but has no reference
delete a;//but can still delete a
很好的解释。谢谢 – ronan 2010-07-29 07:11:55
在一个容器中的对象被当你明确地删除元素,当你的容器超出范围破坏。
当元素读取未被擦除时,容器类如何处理内存?
它没有。没有内存处理要完成。
创建对象时,必须分配内存,当内存被销毁时,必须释放内存。
当您读取现有元素时,您并未创建或销毁任何内容,因此容器不需要执行任何操作。
谢谢 因此,当容器超出范围时,内存得到释放。或者你申请删除,即析构函数被调用。 – ronan 2010-07-28 12:04:28
这个问题并不能使目前的形式太大的意义,你能澄清?可能会添加一些代码并描述正在发生的事情以及您期望发生的事情? – Naveen 2010-07-28 11:45:38
这个问题对我没有意义。也许有一些示例代码来展示你的意思会有所帮助。 – 2010-07-28 11:49:35
击败了我:) – 2010-07-28 11:49:57