据我所知,我应该在析构函数中销毁我创建的所有内容new并关闭打开的文件流和其他流.但是,我对C++中的其他对象有些怀疑:
std::vector和std::strings:它们会自动销毁吗?
如果我有类似的东西
std::vector<myClass*>
Run Code Online (Sandbox Code Playgroud)
指向类的指针.调用向量析构函数时会发生什么?
它会自动调用析构函数myClass吗?或者只有矢量被破坏,但它包含的所有对象仍然存在于内存中?
如果我有一个指向类中另一个类的指针会发生什么,比如说:
class A {
ClassB* B;
}
Run Code Online (Sandbox Code Playgroud)
并且在代码中的某个点销毁A类.B类是否会被销毁,或者只是指针和B类仍将存在于内存的某个地方?
hmj*_*mjd 39
std :: vector和std :: strings:它们会自动销毁吗?
是(假设成员变量不是指向std::vector和std::string).
如果我有像std :: vector这样的东西,那么在调用向量析构函数时会发生什么?它会自动调用myClass的析构函数吗?或者只有矢量被破坏,但它包含的所有对象仍然存在于内存中?
如果vector<MyClass>那么向量中包含的所有对象都将被销毁.如果vector<MyClass*>那么所有对象必须是显式的deleted(假设被破坏的类拥有该对象vector).第三种选择是vector智能指针,例如vector<shared_ptr<MyClass>>,在这种情况下,vector不需要明确地说明元素delete.
如果我有一个指向类中另一个类的指针会发生什么
在B必须明确delete天.同样,智能指针可用于处理破坏B.
您只需要担心动态创建的内存(使用保留内存时)new。
例如:
Class Myclass{
private:
char* ptr;
public:
~Myclass() {delete[] ptr;};
}
Run Code Online (Sandbox Code Playgroud)