概述
例子
static size_t sn;
class Employee{
private:
//std::string name;
std::shared_ptr<std::string>name;
size_t ID = ++sn; //每次生成唯一ID
public:
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),定义行为像值得类,和定义行为像指针的类;
最后
以上就是无情萝莉为你收集整理的C++注意防止指针指向空的全部内容,希望文章能够帮你解决C++注意防止指针指向空所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复