1. 动态空间分配失败的判断
可以调用set_new_handler,它是声明于<new>的一个标准程序库函数,它的参数是个new_handler指针,指向operator new无法分配足够内存时该被调用的函数,返回值也是个指针,指向它被调用前正在执行的那个new-handler函数。参考《Effective C++》中文第三版,P240-241
#include <iostream>
#include <new>
using namespace std;
//当operator new无法分配足够内存时被调用的函数
void noMemory()
{
cout<<"no adequate memory left"<<endl;
//退出程序,若无abort则直到成功分配内存为止
abort();
}
int main()
{
set_new_handler(noMemory);
int *nums = new int[10000000000];
}
2. 动态数组通过传参获得而非直接返回
int *turnArray()
{
int *nums;
//code here...
return nums;
}
若以这种返回方式获得数组容易出现无法读出等诡异问题,改为引用方式获取比较保险
void turnArray(int *&nums)
{
//code here...
}
3. 继承
对于在多个类中都会被使用的参数或调用的函数函数可将它们写在一个基类中,其它类继承这个基类
class basico
{
public:
int n;
bool inputNums(int *&);
void outputNums(int *,int);
};
class abcd:public basico
{
//......
};
class efgh:public basico
{