C++ 小心你的析构函数不会执行
来源:互联网 发布:c语言联合体 编辑:程序博客网 时间:2024/06/16 15:41
#include <string>
#include <iostream>
using namespace std;
class Student
{
public:
int num ;
string strname;
Student(int num,string name)
{
this->num=num;
this->strname=name;
}
~Student()
{
cout<<"num:"<<this->num<<"name"<<this->strname<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
#include <iostream>
using namespace std;
class Student
{
public:
int num ;
string strname;
Student(int num,string name)
{
this->num=num;
this->strname=name;
}
~Student()
{
cout<<"num:"<<this->num<<"name"<<this->strname<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Student stu1(1,"Li Ming");//对象定义在栈上,所以程序结束时会自动析构哦;
Student *pstu2=new Student(2,"Wang qing");//对象定义在堆上,除非delete否则不析构
//(1)
}
上面两种定义都定义了对象,但是执行结果是下面的:
上面没有调用delete删除堆上的对象,所以程序即使结束了,对象是不会自动析构的,这就产生了垃圾;如何这些是一些资源文件或者内核对象,你的程序迟早挂掉;
在(1)处加入 delete pstu2;
所以,使用类定义的对象是能够自动析构的;使用类通过new出来的对象,是需要delete的,你不delete,你SOCKET、多线程编程会出问题的;
对象生命周期
作用域由{}定义,可以用构造函数和析构函数来追踪对象的生命周期,比较简单,不述。
(1)全局对象在main开始前被创建,main退出后被销毁。
(2)静态对象在第一次进行作用域时被创建,在main退出后被销毁(若程序不进入其作用域,则不会被创建)。
(3)局部对象在进入作用域时被创建,在退出作用域时被销毁。
(4)new创建的对象会一直存在,即使指向该对象的指针已被销毁,容易造成内存泄漏。(书上说对象会一直存在直到程序退出,因此应该推断,程序退出时对象会销毁,但如书中所说,不是“优雅”地销毁的。)
- C++ 小心你的析构函数不会执行
- 小心你的构造函数
- 小心你的【函数重载】
- PHP empty(),你需要小心的函数
- 小心你的命令
- 小心啦,小心你的主板也要被烧
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- 那些你可能不会注意的C+细节
- 3C低头族 小心飞蚊症找上你
- 小满的C++学习心得(3) 小心析构函数和复制构造函数!
- finally 不会执行的情况
- 小心你的QQ Mail出卖你
- fgets函数的小心得
- C++primer--拷贝控制__构造函数和析构函数的执行时期
- 小心C语言时间函数陷阱
- 小心使用C语言realloc()函数
- 丢失的违例(小心你的finally)
- c++写的os,对于全局对象,构造函数不会执行
- Perl Hash Howto
- 关闭休眠扩大c盘空间
- android输入
- 二维码生成与解析代码实现
- Oracle 10g如何实现 wm_concat函数(转)
- C++ 小心你的析构函数不会执行
- 聚簇表
- IOS开发(23)之UITableView控件
- 黑马程序员——JAVA学习日志1
- android 集成第三方静态库的编译方法
- poj 1703 Find them, Catch them
- Poco::Base64Encoder,Poco::Base64Decoder
- osx 配置 Apache+Mysql+Php
- FFmpeg 移植 Android