今天开始看effective C++了,感觉写的不错,特此用自己的语言记录一下加深印象~
1.得了解C++编译器会默认编写并调用哪些函数
//当声明一个空类时,编译器会为这个类默默编写4个函数并调用他们以便实现类的功能
class A
{
};
//在编译器的支持下,上面这个空类等价于下面这个类
class A
{
public:
A(){}; //default构造函数
A(const A&){}; //拷贝构造函数
A& operator=(const A&){}; //拷贝赋值操作符
~A(){}; //析构函数
};class A
{
public:
int a;
};
class B : public A
{
public:
int b;
};
A* p=new A;
p=new B;
//从上面两个类来看,分配给类A的实例的内存占4个字节(32bit),而分配给类B的实例的内存占8个字节
//那么让p指向一个类B的实例后,指针p只能访问继承来的前四个字节
B* p2=new B;
p2=new A;
//上面这么做的结果就是未定义
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"A constructor"<<endl;};
~A(){cout<<"A destructor"<<endl;};
virtual void fun(){cout<<"A"<<endl;};
//virtual ~A(){cout<<"A destructor"<<endl;};
};
class B : public A
{
public:
B(){cout<<"B constructor"<<endl;};
~B(){cout<<"B constructor"<<endl;};
void fun(){cout<<"B"<<endl;};
};
int main()
{
A* p=new B;
p->fun();
delete p; //会出现未定义行为,必须给A类加上一个虚析构函数
return 0;
}
Effective C++(1)------------------------------构造/析构/赋值
原文:http://blog.csdn.net/liusuangeng/article/details/45397433