void 指针问题
来源:互联网 发布:jquery 数组转换json 编辑:程序博客网 时间:2024/06/13 07:41
void *p = new ClassA();
delete p; //错误。不会调用ClassA的析构函数
delete (ClassA*)p; //正确。指明指针类型
ClassA *lpA = new ClassA();
void *q = lpA;
delete q; //错误。不会调用ClassA的析构函数
delete (ClassA*)q; //正确。指明指针类型
class ClassA
{
public:
ClassA(){TRACE("ClassA constructor!/n");};
~ClassA(){TRACE("ClassA destructor!/n");};
};
class ClassB : public ClassA
{
public:
ClassB(){TRACE("ClassB constructor!/n");};
~ClassB(){TRACE("ClassB destructor!/n");};
};
ClassA *p1 = new ClassB(); //先调用ClassA的构造函数。再调用ClassB的构造函数。(先执行基类构造,再执行继承类构造)
delete p1; //只调用ClassA的析构函数。因为p1是ClassA
ClassA *p2 = new ClassB();
delete (ClassB*)p2; //先调用ClassB的析构函数。再调用ClassA的析构函数。(先执行继承类析构,再执行基类析构)
ClassA *p3 = new ClassB();
delete (ClassA*)p3; //同delete p1;
//ClassB *p4 = new ClassA(); //不能由基类转化为继承类
//delete p4;
输出:
ClassA constructor!
ClassB constructor!
ClassA destructor!
ClassA constructor!
ClassB constructor!
ClassB destructor!
ClassA destructor!
ClassA constructor!
ClassB constructor!
ClassA destructor!
结论:
1、继承类创建时先执行基类的构造函数,再执行继承类的构造函数。
析构的时候顺序相反,先执行继承类的析构函数,再执行基类的析构函数。
2、执行 delete a; 时,是根据 a 的类型来决定如何释放对象。与它指向的对象类型无关
class ClassA
{
public:
ClassA(){TRACE("ClassA constructor!/n");};
virtual ~ClassA(){TRACE("ClassA destructor!/n");};
};
class ClassB : public ClassA
{
public:
ClassB(){TRACE("ClassB constructor!/n");};
~ClassB(){TRACE("ClassB destructor!/n");};
};
ClassA *p1 = new ClassB();
delete p1; //先调用ClassB的析构函数,再调用ClassA的析构函数。因为virtual ~ClassA()
- void 指针问题
- 关于pthread_exit(void *rval_ptr)使用void指针的问题
- C语言之void 指针问题
- 浅谈void指针的类型转换问题
- void及void指针
- void和void指针
- void 指针 void*
- void及void指针
- void * (void 指针)
- void与void*指针
- void和void指针
- void和void指针
- void及void指针
- void指针
- void指针
- void指针
- void指针。。。
- void指针
- 计算机英语的良好的学习习惯
- 云上的IaaS(智能作为服务)比SaaS更有价值
- Effective C# 原则15:使用using和try/finally来做资源清理
- 今天学习了一下正则表达式
- Microsoft SQL 服务器的最佳实践,设计和开发准则
- void 指针问题
- 细品RibbonX(8):自定义Ribbon的“武器库”
- 按时间段统计,不连续的日期要补上
- 如何评价软件的质量
- 使用DDD+GDB开发ARM Linux程序
- 众多技术我该学那样?(转)
- 美化博客样式
- oracle一个比较完整的分页工具类Page
- 几种常见网页自动跳转方法