一:总述与回顾
二:从new说起
1、new类对象时加不加括号的差别
<1>如果是一个空类,那么如下两者没有区别;
<2>类中有成员变量,带括号的初始化会把一些成员变量有关的内存清零,但不是把整个对象的内存全部清零;
<3>当类中有构造函数,不管有没有虚函数,下面两种写法没有区别,至于初始化结果,则是根据你类中定义的构造函数怎么是实现决定。若构造函数未初始化,则成员变量为未定式。
#include <iostream>
using namespace std;
namespace nmsp1
{
class A
{
public:
int m_i;
A()
{
}
};
void func()
{
A* pa1 = new A();
A* pa2 = new A;
int* p3 = new int;
int* p4 = new int();
int* p5 = new int(100);
cout << "test" << endl;
}
}
int main()
{
nmsp1::func();
return 1;
}
2、new、delete干了啥
<1>new可以叫关键字 / 操作符。干了两件事:一是调用opeartor new(malloc),二是调用了类A的构造函数。
A *pa = new A(); //操作符
operator new() //函数
malloc() //C语言中的malloc()函数
A::A() //有构造函数就调用
<2>delete干了两件事:一是调用了类A的西沟函数;二是调用operator delete(free)。
delete pa;
A::~A(); //析构函数
operator delete();
free() //C语言中的free()函数