相关疑难解决方法(0)

在任何情况下new都会返回NULL吗?

我知道根据C++标准,如果新的无法分配内存,它应该抛出std :: bad_alloc异常.但我听说有些编译器如VC6(或CRT实现?)不遵守它.这是真的 ?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看.

c++ memory-management visual-c++-6 new-operator visual-c++

52
推荐指数
3
解决办法
4万
查看次数

指向零长度数组的指针的属性

考虑

int main()
{
    auto a = new int[0];
    delete[] a; // So there's no memory leak
}
Run Code Online (Sandbox Code Playgroud)

在复制初始化和删除之间,您是否允许读取指针a + 1

此外,该语言是否允许编译器设置anullptr?

c++ language-lawyer

22
推荐指数
2
解决办法
460
查看次数

如何测试自动指针是否为空?

我是自动指针的新手.我有这个:

std::auto_ptr<myClass> myPointer(new MyClass(someArg));
Run Code Online (Sandbox Code Playgroud)

如何测试是否可以myPointer成功实例化?我试过if (myPointer==NULL),编译器发出错误:

没有运算符"=="匹配这些操作数.

c++ auto-ptr

8
推荐指数
2
解决办法
2万
查看次数

重载new和delete的nothrow版本

请看下面的代码:

#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)

c++

3
推荐指数
1
解决办法
1512
查看次数