是否自动调用析构函数
Does the destructor get called automatically
我的问题很简单,但我在任何地方都找不到这个问题。
如果我有这样的类
class A {
vector<int> data;
}
当A
的实例被销毁时,data
也会被正确销毁吗?或者我应该为A
编写一个析构函数,调用data
的析构函数吗?基本上我担心当A
的实例被破坏时,vector的动态内存是否不会被释放。我怀疑答案是data
被正确释放了,但我不想发现我错了。
此外,如果A
是一个结构,当A
的本地实例超出范围时,会调用data
的析构函数吗?
是的,data
会被自动销毁,你不需要做任何事情来实现它。vector
会处理它分配的动态内存的清理。当A
的实例被销毁时,向量的析构函数会被自动调用。
无论CCD_ 13是CCD_ 14还是CCD_。
不需要,数据成员的析构函数总是被调用的。
显式析构函数是有用的手动内存管理
struct a{
int* ip;
a()
: ip(new int(5))
{ }
~a() { delete ip; }
};
也就是说,一般来说,你应该使用RAII容器(比如智能指针),所以我个人很少在那里写dtor。
例外情况是将基类dtor声明为虚拟的。
struct base {
virtual ~base() {}
};
struct child : public base {
//base and child destructor automatically called
}
如果您自己没有定义默认的析构函数,则编译器会自动创建一个默认析构函数。通常,您不需要创建自己的析构函数,除非您有指针数据成员"拥有"它们所指向的内存,和/或您正在设计由其他类派生的类,此时您至少需要声明一个空的virtual
析构函数。
在任何情况下,无论是使用您自己的析构函数,还是使用默认编译器创建的析构符,非静态数据成员的所有析构函数以及当前类的任何基类都会在析构函数结束时和析构函数本身返回之前调用。
相关文章:
- 析构函数调用
- 在具有向量的类构造函数中进行析构函数调用
- 从 c++ 中派生类的析构函数调用虚函数
- C++析构函数调用两次,堆栈分配的复合对象
- C++ 在析构函数调用之前删除的动态成员数组
- 析构函数调用c++中的一个向量
- Singleton模式中的手动析构函数调用:调用多次
- 从内部类的析构函数调用虚拟函数
- 与 boost odeint 集成期间的析构函数调用
- 堆栈展开如何与析构函数调用有关?
- C++:优化析构函数调用
- 以逗号分隔的表达式中的析构函数调用
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 从指针返回对象时出现意外的析构函数调用
- 使用 decltype 显式析构函数调用
- C++析构函数调用了错误的对象
- 了解虚拟函数和析构函数调用
- 多重继承析构函数调用他自己和父析构函数?c++
- 析构函数调用表单不适当的库