C++编程思想(2nd卷一):动态对象创建
来源:互联网 发布:网络摄像机接拾音器 编辑:程序博客网 时间:2024/06/10 15:52
当创建一个C++对象时,会发生两件事:
1.为对象分配内存。
2.调用构造函数来初始化那个内存。
如果想对一个void*类型指针进行delete操作,要注意这将可能成为一个程序错误,除非指针所指的内容是非常简单的,因为,它将不执行析构函数。
Object* a = new Object(40, 'a');
delete a;
void* b = new Object(40, 'b');
delete b;
输出为:
Constructing object a, size = 40
Destructing object a
Constructing object b, size = 40
因为delete a知道a指向一个Object对象,所以析构函数将会被调用,从而释放了分配给data的内存。但是,正如在进行delet b的操作中,如果通过void*类型的指针对一个对象进行操作,则只会释放Object对象的内存,而不会调用析构函数,也就不会释放data所指向的内存。编译这个程序时,编译器会认为我们知道所做的一切。于是我们不会看到任何警告信息。但因此我们会丢失大量的可用内存。
如果在程序中发现内存丢失的情况,那么就搜索所有的delete语句并检查被删除指针的类型。如果是void*类型,则可能发生了引起内存丢失的某个因素(因为C++还有很多其他的引起内存丢失的因素)。
- C++编程思想(2nd卷一):动态对象创建
- C++编程思想(2nd卷一):动态对象创建
- C++编程思想(2nd卷一):常量
- C++编程思想(2nd卷一):内联函数
- C++编程思想(2nd卷一):名字控制
- C++编程思想(2nd卷一):运算符重载
- C++编程思想(2nd卷一):继承和组合
- C++编程思想(2nd卷一):模板简介
- C++编程思想(2nd卷一):常量
- C++编程思想(2nd卷一):内联函数
- C++编程思想(2nd卷一):名字控制
- C++编程思想(2nd卷一):运算符重载
- C++编程思想(2nd卷一):继承和组合
- C++编程思想(2nd卷一):模板简介
- C++编程思想(2nd卷一):函数重载与默认参数
- C++编程思想(2nd卷一):引用和拷贝构造函数
- C++编程思想(2nd卷一):多态性和虚函数
- C++编程思想(2nd卷一):函数重载与默认参数
- 发现家里真的不适合学习和工作
- C++编程思想(2nd卷一):引用和拷贝构造函数
- C++编程思想(2nd卷一):运算符重载
- sizeof()
- 类型转换
- C++编程思想(2nd卷一):动态对象创建
- 指针跟首元素地址有区别的几种操作
- 随写
- C++编程思想(2nd卷一):继承和组合
- C++编程思想(2nd卷一):多态性和虚函数
- C++编程思想(2nd卷一):模板简介
- 堕落啊,好久没搞了,继续努力!
- [转]C++程序设计之四书五经
- Vim的功能补充