程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> new的三種用法

new的三種用法

編輯:關於C

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 <iostream>
using namespace std;

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

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

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

// main.cpp
#include “Emp.h”
#include <iostream>
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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved