据我所知,在析构函数中应该销毁使用new
创建的所有内容,并关闭已打开的文件流和其他流。但是,我对C++中的其他对象存在一些疑虑:
std::vector
和std::string
:它们会自动销毁吗?如果我有以下内容:
std::vector<myClass*>
指向类的指针。当调用vector析构函数时会发生什么?
它会自动调用myClass
的析构函数吗?还是只有vector被销毁,其中包含的所有对象仍然存在于内存中?如果我在一个类中有指向另一个类的指针,会发生什么,比如:
class A { ClassB* B; }
如果在代码中某个时刻销毁了 Class A,那么 Class B 也会被销毁吗?还是只有指针被销毁了,而 Class B 仍然存在于内存中?
vector<myClass*>
包含的对象是myClass*
对象,也就是指针类型的对象。当向量被销毁时,它们也会被销毁,但是销毁指针并不会影响指针所指向的对象。因此,向量包含的对象在内存中并不存在。想象指针所指向的对象是“包含在向量中”的,这种想法会妨碍你自己回答问题的能力 :-) - Steve Jessop