C++点滴:创建对象数组的时候,不要使用继承

原创 2006年06月15日 15:43:00
创建对象数组的时候,不要使用继承,因为如果一个数据声明为父类型,但是实际使用子类型创建,那么在删除对象数据的时候,则只会调用父类型的析构函数,而不会调用子类型的析构函数,造成内存泄漏,例如:
class Base
{
    public:
        Base(){cout << "Base()" <<endl;}
        ~Base(){cout <<"~base()" <<endl;}
   
};
class Son:public Base
{
    public:
        Son(){cout << "Son()"<<endl;}
        ~Son(){cout << "~Son()" << endl;}  
};
void printClass()
{
    //Son s[10];   
    Base *b = new Son[10];
    delete[] b;//只会打印出10个~base(),而不会调用~Son()
}

C++中创建对象的时候加括号和不加括号的区别

c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a...

C++中创建对象的时候加括号和不加括号的区别

c++创建对象的语法有—– 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My...

C++中创建对象的时候加括号和不加括号的区别

C++中创建对象的时候加括号和不加括号的区别前提:类中有无参构造(默认/自定义) 在栈上创建 MyClass a; 在堆上创建加括号 MyClass *a= new MyClass(); #inclu...

在使用Scripting.FileSystemObject 的时候报错automation服务器不能创建对象

在使用Scripting.FileSystemObject 的时候报错automation服务器不能创建对象的解决办法...

Item 7:当创建对象的时候,区分()和{}的使用

本文翻译自《effective modern C++》,由于水平有限,故无法保证翻译完全正确,欢迎指出错误。谢谢! 从不同的角度来看,在C++11中,对象初始化拥有多种语法选择,这体现了语法丰富造成的...
  • boydfd
  • boydfd
  • 2016年02月05日 10:38
  • 519

const对象,NULL和nullptr,C++中创建对象数组

1.定义成了const之后的类 #include class area { public: int x; int y; mutable int z; //不受const约束的类成员 ar...

Java中创建对象的时候代码执行顺序

在Java中,创建一个对象,到底代码执行顺序是什么样子的。通过编写一个类,测试一下就知道了。 1、首先测试一个直接从Object继承的类。 public class Parent {     p...

76、Singleton和prototype分别在什么时候创建对象?(9条)

1——分别在什么时候?2——需要的类3——User.java4——(Singleton)bean.xml5——(Single ton)App(测试类)6——(SIngleton)效果7——(proto...

QTBrowserPlugin在销毁的时候会再次创建对象的问题

在使用qt的browserplugin框架写npapi插件时发现一个奇怪的现象,产生的日志内容一开始还是正确的,在关闭的时候日志突然就变了。遇到这么奇怪的现象,很是郁闷,但是程序不说说谎的,肯定还是某...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++点滴:创建对象数组的时候,不要使用继承
举报原因:
原因补充:

(最多只允许输入30个字)