C++中new类型的运算符怎么使用
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要介绍"C++中new类型的运算符怎么使用",在日常操作中,相信很多人在C++中new类型的运算符怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++
千家信息网最后更新 2025年11月11日C++中new类型的运算符怎么使用
这篇文章主要介绍"C++中new类型的运算符怎么使用",在日常操作中,相信很多人在C++中new类型的运算符怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++中new类型的运算符怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1.new操作符
new operator,平时用的最多的new操作符,其对应delete operator,不能被重载,其包含两个操作(既申请空间,又调用构造函数)
(1)使用::operator new申请内存
(2)调用类的构造函数
class CTestUse{public: CTestUse() { cout << __FUNCTION__ << endl; } virtual ~CTestUse() { cout << __FUNCTION__ << endl; } private:}; void test(){ string *pStr = new string("new operator"); cout << *pStr << endl; delete pStr; CTestUse *pCase = new CTestUse; delete pCase;} int main(int argc, char *argv[]){ test(); return 0;}运行结果如下:
2.::operator new
::operator new,只会申请空间,不会调用构造函数,可以被重载,其对应 ::operator delete (只申请空间)
2.1原始调用
class CTestUse1{public: CTestUse1() { cout << __FUNCTION__ << endl; } virtual ~CTestUse1() { cout << __FUNCTION__ << endl; } void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; } private:}; void test1(){ CTestUse1 *pCase = (CTestUse1 *)::operator new (sizeof(CTestUse1)); pCase->show(); ::operator delete(pCase); } int main(int argc, char *argv[]){ test1(); return 0;}运行结果如下:

2.2重载1
class CTestUse2{public: CTestUse2() { cout << __FUNCTION__ << endl; } virtual ~CTestUse2() { cout << __FUNCTION__ << endl; } void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; } void* operator new(size_t size) { cout << __FUNCTION__ << endl; return ::operator new(size); } void operator delete(void* ptr) { cout << __FUNCTION__ << endl; ::operator delete(ptr); } private:}; void test2(){ CTestUse2 *pCase = new CTestUse2; pCase->show(); delete pCase; } int main(int argc, char *argv[]){ test2(); return 0;}运行结果如下:
2.3重载2
class CTestUse3{public: CTestUse3() { cout << __FUNCTION__ << endl; } virtual ~CTestUse3() { cout << __FUNCTION__ << endl; } void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; } void* operator new(size_t size, string str) { cout << __FUNCTION__ << str << endl; return ::operator new(size); } void operator delete(void* ptr) { cout << __FUNCTION__ << endl; ::operator delete(ptr); } private:}; void test3(){ CTestUse3 *pCase = new ("heshiyang") CTestUse3; pCase->show(); delete pCase; } int main(int argc, char *argv[]){ test3(); return 0;}运行结果如下:

3.place new
place new在已经构建好的内存中创建对象,其只会返回已经申请好的内存指针,多用在高性能场景下,提前申请好内存,可以节省申请内存开消 (只调用构造函数)
class CTestUse4{public: CTestUse4() { cout << __FUNCTION__ << endl; } virtual ~CTestUse4() { cout << __FUNCTION__ << endl; } void show() { cout << __FILE__ << " " << __FUNCTION__ << endl; } void* operator new(size_t size, void* p) { cout << __FUNCTION__ << endl; return p; } void operator delete(void* ptr) { cout << __FUNCTION__ << endl; ::operator delete(ptr); } private:}; void test4(){ char* pChar = new char[sizeof(CTestUse4)]; CTestUse4* pCase = new (pChar) CTestUse4; //调用全局::new (pChar) CTestUse4,new (pChar) CTestUse4调用重载new //delete pCase; pCase->~CTestUse4();} int main(int argc, char *argv[]){ test4(); return 0;}运行结果如下:
到此,关于"C++中new类型的运算符怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
内存
结果
运行
类型
运算符
C++
运算
函数
学习
空间
操作符
更多
帮助
原始
实用
接下来
两个
场景
对象
指针
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
工业实时数据库公司
南京软件开发公司前十名
bv310系统升级服务器地址
xp能做服务器吗
浦东新区互联网教育科技
怎么将一个表导入到数据库中
宁夏儿火网络技术有限公司
泰州江苏服务器代理厂家虚拟主机
服务器网络要求
云核网络技术
怎么用cmd连接数据库
并发控制是保证数据库的完整性
甘肃安宁网络安全
网络安全技巧教学
游戏软件开发基地
数据库关系的连接运算
服务器如何制作数据库
云梯删除了服务器节点
spark 关系型数据库
云服务器算是企业的流动资产吗
计算机网络安全管理路径探索
网络安全规划报告
服务器升级的通知
网络技术基础试卷及答案
大师兄软件开发服务
2个服务器能同时登陆plex吗
数据库能存储图片吗
高级网络技术实训报告
小米 网络安全
深圳软件开发的学校有哪些