对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的值的操作-对比值