我正在写一个像这样的课程
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并不是初始成功
答案 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;
}