C++中new和delete的实质--代码解释
2007-07-07 22:01
316 查看
#include<iostream>
using namespace std;
class A{
int i;
public:
A(int k = 0):i(k){ cout<<"constructor..."<<endl; }
void print() { cout<<i<<endl; }
~A() { cout<<"deconstructor..."<<endl; }
};
int main(){
//下面实现A *p = new A;
A *p;
try{
void *m = ::operator new (sizeof(A));
p = static_cast<A *>(m);
new (p) A(2);//placement new,complier实质这样做: p->A::A(2);
}
catch(bad_alloc){
cerr<<"cannot allocate memory..."<<endl;
}
//test
p->print();
//delete p;//要使唤起deconstractor,p不可以是void*
p->~A();
::operator delete (p);
}
由此我们可以更好的进行new和delete重载。
using namespace std;
class A{
int i;
public:
A(int k = 0):i(k){ cout<<"constructor..."<<endl; }
void print() { cout<<i<<endl; }
~A() { cout<<"deconstructor..."<<endl; }
};
int main(){
//下面实现A *p = new A;
A *p;
try{
void *m = ::operator new (sizeof(A));
p = static_cast<A *>(m);
new (p) A(2);//placement new,complier实质这样做: p->A::A(2);
}
catch(bad_alloc){
cerr<<"cannot allocate memory..."<<endl;
}
//test
p->print();
//delete p;//要使唤起deconstractor,p不可以是void*
p->~A();
::operator delete (p);
}
由此我们可以更好的进行new和delete重载。
相关文章推荐
- 4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)
- <<Effective C++>>读书笔记8: 定制new和delete
- C++:多维数组的动态分配(new)和释放(delete)
- (转)c++内存分配优先使用内存池,而不是new,delete
- 【C++】不同含义new和delete
- c++ 内存管理:9、malloc/free的使用要点 new/delete的使用要点
- More Effective C++:不同new和delete
- C++中new和delete的用法
- [置顶] 【C++】 深入探究 new 和 delete
- C++中new和delete在数组指针和指针数组中的调用
- 【C++】动态内存管理(一)成对使用new和delete时要采取相同形式
- C++中指针的new和delete
- C++基础系列五:自增自减操作符、箭头操作符、new和delete操作符
- C++ malloc/free和new/delete
- C++中new和delete
- c++中new和delete的使用方法
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- C++ 笔记,重载new , delete 操作符
- C++中关于new和delete的使用
- C/C++内存分配方式,栈区堆区 new/delete/malloc/free