new operator 与operator new关系
new一个对象时,说的是(new操作符)new operator,是语言内置的,和sizeof()操作符一样。它有两个作用,一开辟空间,二是调用构造函数。
delete 一个对象时,说是 delete operator,它有两个作用,一调用析构函数,二是释放空间。 二者相反作用。
调用new operator 时
1、会调用(操作符new)operator new,开辟空间
2、调用构造函数
3、operator new 是函数,函数原型void * operator new(size_t sz)
#include<iostream>
using namespace std;
#include<vld.h>
class String
{
public:
String(char *str=NULL)
{
if(str == NULL)
{
m_str = new char[1];
strcpy(m_str,'\0');
}
else
{
m_str = new char[strlen(str)+1];
strcpy(m_str,str);
}
}
~String()
{
delete[]m_str;
m_str = NULL;
}
private:
char *m_str;
};
//作用域问题
void* operator new(size_t sz)
{
void *p=malloc(sz);
return p;
}
void operator delete(void *p)
{
free(p);
}
void main()
{
//String s("123");
//String *s=new String("123");
//delete s;
//operator new 主要用于开辟空间
String *p=(String*)operator new(sizeof(String));
//定位new
new(p)String("adad");
p->~String();
//operator delete主要用于释放空间
operator delete(p);
}
定位new
placement new :对象已经分配内存,但未经过处理内存空间。
#include<iostream>
using namespace std;
//指那改变哪的值
void * operator new(size_t sz,int *p,int pos)
{
return &p[pos];//&[p+pos]
}
void main()
{
int ar[10];
new(ar)int(10);
new(ar,3)int(3);
new(ar,7)int(5);
}
书籍
more effective c++ 、effective c++