对C++中new的认识

Posted single-dont

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对C++中new的认识相关的知识,希望对你有一定的参考价值。

在C++中,我们常会遇到三种new的形式:operator new 、new operator 、placement new

①new operator (new操作符):①申请空间  ②创建对象

图示步骤:

 技术图片

②operator new (操作符new): 申请空间

③placement new (定位new):对已申请的空间创建对象

格式:new(ptr)A("123")   ptr---指向一块已经申请好的空间

 

总结:可以简单的认为②③是①操作的解刨。但在②③中,当需要释放空间时,需要显式调用对象的析构函数释放类实体成员申请的空间。

 

代码应用:

#include<iostream>
using namespace std;


//operator new
//new operator
//placement new

//重载new operator
void* operator new(size_t sz)

    void* p = malloc(sz);
    return p;

void operator delete(void *p)

    free(p);

void operator delete[](void *p)

    free(p);


class String;
ostream& operator<<(ostream& out, String& str);

class String

public:
    friend ostream& operator<<(ostream& out, String& str);
public:
    String(const char* str = "")
    
        std::cout<<"contruct Object"<<std::endl;
        if (str == NULL)
        
            m_data = new char[1];
            m_data[0] = \\0;
        
        else
        
            m_data = new char[strlen(str) + 1];
            strcpy(m_data,str);
        
    
    ~String()
    
        cout<<"free Object"<<endl;
        delete[]m_data;
        m_data = NULL;
    
    
private:
    char* m_data;
;
ostream& operator<<(ostream& out, String& str)

    out << str.m_data;
    return out;



int main()

    String *str = new String("Hello");// new operator
    delete str;
    String *str = new String[10];
    String *ps = (String *)operator new(sizeof(String)); //operator new
    new(ps)String("Hello");  //placement new
    ps->~String();
    operator delete(ps);
    return 0;

 

以上是关于对C++中new的认识的主要内容,如果未能解决你的问题,请参考以下文章

从头认识Spring-1.15 对SpEl的值的操作-数值运算

从头认识Spring-1.15 对SpEl的值的操作-数值运算

从头认识Spring-1.15 对SpEl的值的操作-对比值

从头认识Spring-1.16 SpEl对集合的操作-查询集合以及投影元素集合

对Java对象的认识与理解

从头认识Spring-1.15 对SpEl的值的操作-逻辑运算以及条件表达式