设为首页 加入收藏

TOP

new的三种用法
2014-11-23 23:39:55 来源: 作者: 【 】 浏览:7
Tags:new 用法

new有三种用法:new operator、operator new、placement new

new operator

new operator是最常见的用法,如 Emp* e1 = new Emp;(Emp是一个类) 这里new有两种作用:分配空间、初始化对象(调用了构造函数)

operator new

operator new作用是只分配空间,不调用构造函数,如:Emp* e2 = (Emp*)operator new(sizeof(Emp));

placement new

placement new作用是在已分配好的空间上初始化对象,不分配空间,调用拷贝构造函数,如:new ((void *)e2) Emp(*tb1);

示例代码如下:

// Emp.h
#ifndef _EMP_H_
#define _EMP_H_

class Emp
{
public:
Emp();
Emp(const Emp& other);
~Emp();
};

#endif // _EMP_H_

// Emp.cpp

#include “Emp.h”
#include
using namespace std;

Emp::Emp()
{
cout<<“Emp…”< }

Emp::Emp(const Emp& other)
{
cout<<“Copy Emp…”< }

Emp::~Emp()
{
cout<<“~Emp…”< }

// main.cpp
#include “Emp.h”
#include
void main()
{
using namespace std;
// new operator 分配空间,调用构造函数
Emp* e1 = new Emp;
// operator new 只分配空间
Emp* e2 = (Emp*)operator new(sizeof(Emp));
// placement new 不分配空间,调用拷贝构造函数
new ((void *)e2) Emp(*e1);
// 显示调用析构函数
e2->~Emp();
// 仅释放空间,不调用析构函数
operator delete(e2);
// 调用析构函数,释放空间
delete e1;

}

作者:tbw

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇给一个不多于5位的正整数,要求:.. 下一篇何时用虚析构函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: