C++中new类型的运算符怎么使用
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍"C++中new类型的运算符怎么使用",在日常操作中,相信很多人在C++中new类型的运算符怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
济南电商平台软件开发公司
美妆商城app软件开发
金融基础数据库什么意思
win服务器批量管理工具
吴白打网络安全大赛
帝国神话开服务器怎么没有野怪
连接服务器错误错误代码-1
数控软件开发零基础入门
浦东新区自动化软件开发案例
.jdb 数据库
用友t3恢复账套 数据库
mes 软件开发
建站怎么设置服务器
云服务器实例
mysql数据库查询列名
bms软件开发包括哪些
王者日落之升服务器在哪个区
修改sql数据库密码
网络出现异常与服务器断开连接
ncbi数据库查找基因
软件开发合同注意问题
创业型软件开发公司
软件开发方面的词汇
凤翼互联网科技
网络技术工程师 教程
计算机网络技术员四级职业
怎么看服务器日志
数据库中的分页查询
数据库sql语句插入一条数据
壹车族网络技术有限公司