初始类失败时C ++返回0

时间:2016-03-24 06:00:11

标签: c++

我正在写一个像这样的课程

class AA{
private:
    char* str;
public:
    AA(int size){
        str = (char*)malloc(size);
    }
};

int main(){
    AA anAA(1000);
}

这里有问题,当大小太大时可能导致malloc返回0指针,如果str init失败,是否有任何方法返回指向anAA的0指针(在主入口点,我可以检查如果(anAA!= NULL)),我不想创建一个创建AA类的函数,或者在类中创建一个检查函数,那么anAA并不是初始成功

2 个答案:

答案 0 :(得分:0)

#include <iostream>
#include <stdexcept>   // std::exception
#include <stdlib.h>    // EXIT_FAILURE
#include <string>      // std::string
#include <vector>      // std::vector
using namespace std;

class AA{
private:
     string str_;
public:
    AA( int const size)
    {
        str_.reserve( size );
    }
};

int main()
{
    try
    {
        AA anAA( 1000 );
        // Whatever
    }
    catch( exception const& x )
    {
        cerr << "!" << x.what() << endl;
        return EXIT_FAILURE;
    }
}

注1:使用这种方法,您可能不需要预先保留大小。

注2:我选择reserve可能是最接近假设的意图,即确保str_至少可以保留一个字符串而不会失败,预先分配资源。

免责声明:我没有编译此代码。

答案 1 :(得分:0)

我会忽略你承诺回答你的问题的暴行。

如果您不想使用例外,最简单的解决方案是定义operator bool()

class AA{
    ...
public:
    operator bool() const {
        return this->str != nullptr; // return str; would actually suffice
    }
};

int main(){
    AA anAA(1000);
    if (!anAA) {
        std::cerr << "Creating object failed.\n";
        return 1;
    }
    return 0;
}