标签:初始化 对象销毁 pre 大小 指针 直接 locate bad cst
string *sp=new string("aaaa"); string *arr=new string[10];//string采用默认初始化
delete sp; delete []arr;
#ifndef _NEWANDDELETE_H_ #define _NEWANDDELETE_H_ #include<new> #include<cstdlib> using namespace std; class NewAndDelete { public: /** * 以下是标准库函数中的operate new和operator delete * 前面4个会抛出异常,后面4个不会抛出异常 * 这几个运算符函数是隐式静态的,因为operator new在构造对象之前,用来分配空间;operator delete在对象销毁之后,用来释放空间 * operator new 或者operator new[]的返回类型必须是void*,第一个形参类型必须是size_t并且没有默认实参,size_t代表要分配的空间的大小 * operator delete或者operator delete[]返回类型必须是void,第一个形参类型必须是void*,用指向待释放内存的指针来初始化 * 这两个函数的行为与allocator类中allocate()和deallocate()很类似 */ static void *operator new(size_t); static void *operator new[](size_t); static void operator delete(void*)noexcept; static void operator delete[](void*)noexcept; static void *operator new(size_t, nothrow_t&)noexcept; static void *operator new(size_t, nothrow_t&)noexcept; static void operator delete(void*, nothrow_t&)noexcept; static void operator delete[](void*, nothrow_t&)noexcept; }; //实现示例——使用malloc和free void* NewAndDelete::operator new(size_t size) { if (void *mem = malloc(size)) return mem; else throw bad_alloc();//抛出异常 } void NewAndDelete::operator delete(void *mem)noexcept { free(mem); } void* NewAndDelete::operator new(size_t size, nothrow_t& no)noexcept {//不抛出异常,返回空指针 void *p; if (void *mem = malloc(size)) return mem; else return p; } void NewAndDelete::operator delete(void *mem, nothrow_t& no)noexcept { free(mem); } #endif
标签:初始化 对象销毁 pre 大小 指针 直接 locate bad cst
原文地址:https://www.cnblogs.com/zhizhiyu/p/10162180.html