我知道根据C++标准,如果新的无法分配内存,它应该抛出std :: bad_alloc异常.但我听说有些编译器如VC6(或CRT实现?)不遵守它.这是真的 ?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看.
考虑
int main()
{
auto a = new int[0];
delete[] a; // So there's no memory leak
}
Run Code Online (Sandbox Code Playgroud)
在复制初始化和删除之间,您是否允许读取指针a + 1?
此外,该语言是否允许编译器设置a为nullptr?
我是自动指针的新手.我有这个:
std::auto_ptr<myClass> myPointer(new MyClass(someArg));
Run Code Online (Sandbox Code Playgroud)
如何测试是否可以myPointer成功实例化?我试过if (myPointer==NULL),编译器发出错误:
没有运算符"=="匹配这些操作数.
请看下面的代码:
#include<iostream>
#include<stdlib.h>
#include<new>
using namespace std;
class ex
{
int x;
public:
ex():ex(0){}
ex(int x):x(x)
{
//cout<<"\nConstructor";
}
void *operator new(size_t siz)
{
void *p;
cout<<"\nOverloaded new operator normal version";
p=malloc(siz);
if(p==NULL)
{
bad_alloc ba;
throw ba;
}
else
return p;
}
void operator delete(void *p,size_t sz)
{
cout<<"\nOverloaded delete normal version:"<<sz;
free(p);
}
void *operator new(size_t siz,const nothrow_t &tag)
{
void *p;
cout<<"\nOverloaded new operator nothrow version";
p=malloc(siz);
if(p==NULL)
{
return 0;
}
else
return p;
}
void …Run Code Online (Sandbox Code Playgroud)