2010-07-28 76 views
-1

好友内存管理+容器

容器有自动内存管理机制。 使用复制构造函数插入值并删除值时,将为每个值调用析构函数。 在读取了元素的no后,将调用哪个stage desctuctor?

当元素读取未被擦除时,容器类如何处理内存?

非常感谢

+1

这个问题并不能使目前的形式太大的意义,你能澄清?可能会添加一些代码并描述正在发生的事情以及您期望发生的事情? – Naveen 2010-07-28 11:45:38

+0

这个问题对我没有意义。也许有一些示例代码来展示你的意思会有所帮助。 – 2010-07-28 11:49:35

+0

击败了我:) – 2010-07-28 11:49:57

回答

1

容器没有内存管理,对象有内存管理。

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 
+0

很好的解释。谢谢 – ronan 2010-07-29 07:11:55

0

在一个容器中的对象被当你明确地删除元素,当你的容器超出范围破坏。

2

当元素读取未被擦除时,容器类如何处理内存?

它没有。没有内存处理要完成。

创建对象时,必须分配内存,当内存被销毁时,必须释放内存。

当您读取现有元素时,您并未创建或销毁任何内容,因此容器不需要执行任何操作。

+0

谢谢 因此,当容器超出范围时,内存得到释放。或者你申请删除,即析构函数被调用。 – ronan 2010-07-28 12:04:28