返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >分享C++三种类型new类型的运算符使用详情
  • 735
分享到

分享C++三种类型new类型的运算符使用详情

2024-04-02 19:04:59 735人浏览 八月长安
摘要

目录1.new操作符2.::operator new2.1原始调用2.2重载12.3重载23.place new1.new操作符 new operator,平时用的最多的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++ new运算符内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 分享C++三种类型new类型的运算符使用详情

本文链接: https://lsjlt.com/news/145505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分享C++三种类型new类型的运算符使用详情
    目录1.new操作符2.::operator new2.1原始调用2.2重载12.3重载23.place new1.new操作符 new operator,平时用的最多的new操作符...
    99+
    2024-04-02
  • C++中new类型的运算符怎么使用
    这篇文章主要介绍“C++中new类型的运算符怎么使用”,在日常操作中,相信很多人在C++中new类型的运算符怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中new类型的运算符怎么使用”的疑惑有所...
    99+
    2023-06-29
  • C++类型转换运算符详解
    目录老式显式类型转换c++的显示类型转换为什么要有新的类型转换具体应该使用哪种转换static_cast运算符dynamic_cast运算符const_cast运算符reinterp...
    99+
    2024-04-02
  • 【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )
    文章目录 一、使用 is 运算符进行类型检测二、使用 as 运算符进行类型转换 ( 智能类型转换 )三、Any 超类 一、使用 is 运算符进行类型检测 在 Kotlin 中 , 如果不确定一个 实例对象的类型 , ...
    99+
    2023-08-23
    kotlin java is运算符 as运算符 Any超类
  • JavaScript详细分析数据类型和运算符
    目录一、js中的数据类型1.数值型2.字符串型3.逻辑(布尔)型4.空(null)值5.未定义(undefined)6.复合数据类型Object二、JavaScript中的运算符1....
    99+
    2024-04-02
  • C++中4种类型转换的方法分享
    目录1. C语言中的类型转换2. 为什么C++需要四种类型转换3. C++强制类型转换3.1 static_cast3.2 reinterpret_cast3.3 const_cas...
    99+
    2023-05-14
    C++实现类型转换方法 C++类型转换方法 C++类型转换
  • java数据类型和运算符的示例分析
    这篇文章给大家分享的是有关java数据类型和运算符的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.整型变量1.基本格式int 变量名 = 初始值;代码示例:public class ...
    99+
    2023-06-14
  • C++11中explicit类型转换运算符的实例用法
    这篇文章主要介绍“C++11中explicit类型转换运算符的实例用法”,在日常操作中,相信很多人在C++11中explicit类型转换运算符的实例用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11...
    99+
    2023-06-19
  • python变量数据类型和运算符怎么使用
    1 数据类型不同类型的变量可以进行的运算是不同的,所以必须理解变量的类型,python中数据类型可以分为:内置类型:数值类型:整型int,浮点型float,复数(complex) 3+5jstr:字符串bool:布尔值【True,False...
    99+
    2023-05-14
    Python
  • python变量数据类型和运算符如何使用
    本篇内容介绍了“python变量数据类型和运算符如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 数据类型不同类型的变量可以进行的运...
    99+
    2023-07-06
  • 学会使用不同类型的Python运算符:全面指南
    Python运算符号指南:掌握各类运算符的用法,需要具体代码示例在Python编程中,运算符是一种用于执行各种数学和逻辑运算的特殊符号。掌握运算符的使用可以帮助程序员更有效地处理数据并实现代码功能。本文将介绍常见的Python运算符类型,并...
    99+
    2023-12-30
    Python 指南 运算符
  • Redis三种特殊数据类型的具体使用
    目录一、HyperLogLog 基数统计1.1 什么是基数?1.2 使用基数统计的好处1.3 应用场景1.4 注意事项 1.5 基本命令1.6 使用二、Geospatial...
    99+
    2024-04-02
  • C语言中+=运算符的使用技巧分享
    += 运算符是一种复合赋值运算符,它通过将变量的当前值与表达式求和并将其存储回变量来简化 код, 累加变量和链式赋值。它可用于累加数组元素、递增计数器等。 C 语言中 += 运算符的...
    99+
    2024-04-03
    运算符 c语言
  • C++11的auto类型修饰符怎么使用
    本篇内容主要讲解“C++11的auto类型修饰符怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11的auto类型修饰符怎么使用”吧!功能介绍C++11提供一了auto类型修饰符,可...
    99+
    2023-06-19
  • 四种引用类型在JAVASpringboot中的使用详解
    目录概念介绍01.  强引用02.  软引用03.  弱引用04.  虚引用对象可达性Springboot源码中的使用总结概念介绍 不同的引用类型,主要体现的是对象不同的可达性(r...
    99+
    2024-04-02
  • MySQL之JSON类型字段的使用技巧分享
    目录准备工作jsON对象基础操作JSON数组操作更多操作JSON字段在Java中的实践测试环境: mysql8.0.19 准备工作 CREATE TABLE json_demo ( `id` INT ( 11 ) N...
    99+
    2024-04-02
  • C++实例讲解四种类型转换的使用
    目录C++类型转换C语言风格的转换C++风格的类型转换static_castreinterpret_castconst_castdynamic_cast小结C++类型转换 C语言风格...
    99+
    2024-04-02
  • PHP8如何使用Stringable Interface处理各种类型的字符串?
    PHP8如何使用Stringable Interface处理各种类型的字符串?PHP8引入了一个新的接口Stringable,该接口可以帮助开发者更方便地处理各种类型的字符串。在过去,我们通常使用is_string()函数来判断一个变量是否...
    99+
    2023-10-22
    PHP interface Stringable
  • 详解SpringBoot使用RedisTemplate操作Redis的5种数据类型
    目录1、字符串(String)1.1 void set(K key, V value);V get(Object key)1.2 void set(K key, ...
    99+
    2024-04-02
  • Java 框架中数据类型和接口的使用技巧分享。
    Java是一种广泛使用的编程语言,它的框架包含了各种数据类型和接口,这些类型和接口是Java编程中最基础的概念之一。在本文中,我们将探讨Java框架中数据类型和接口的使用技巧,并且给出相应的演示代码。 一、Java数据类型的使用技巧 基本...
    99+
    2023-10-13
    框架 数据类型 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作