据我所知,我应该在析构函数中销毁我创建的所有内容new
并关闭打开的文件流和其他流.但是,我对C++中的其他对象有些怀疑:
std::vector
和std::string
s:它们会自动销毁吗?
如果我有类似的东西
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*>
那么所有对象必须是显式的delete
d(假设被破坏的类拥有该对象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)