C++注意防止指针指向空

来源:互联网 发布:swfobject.js 编辑:程序博客网 时间:2024/06/12 21:04

例子

static size_t sn;class Employee{private:    //std::string name;    std::shared_ptr<std::string>name;    size_t ID = ++sn;  //每次生成唯一IDpublic:    Employee() = default; //默认构造函数    Employee(const std::string &s) :name(std::make_shared<std::string>(s)){}    //Employee(const std::string &s) :name(new std::string(s)){}    size_t GetID()const{ return ID; }    std::string GetName()const{ return *name; }};void print(const Employee s){    std::cout << s.GetID() << "\t" << s.GetName() << std::endl;}Employee a;//此处调用a的默认构造函数,name智能指针会初始化为空Employee b("zhangyi"), c = b;//print(a); //name指针为空,不能进行访问,程序运行出错print(b);print(c);

防止指针指空,运行时注意if检查
智能指针可以用在合成拷贝函数,合成拷贝赋值运算符下,使一个类的对象初始化另外一个类(含有智能指针数据成员的类)

对于含有普通指针的类,而且构造时给它动态分配了内存空间,必须要自己定义析构函数(显示delete),然而一旦一个类定义了析构函数,那么它几乎肯定也需要一个拷贝构造函数和一个拷贝赋值运算符(C++ primer P447),定义行为像值得类,和定义行为像指针的类;

0 0
原创粉丝点击