C++基础::shared_ptr 编程细节(二)
2016-02-23 17:15
591 查看
C++基础::shared_ptr 编程细节(一)
C++基础::shared_ptr 编程细节(二)
C++基础::shared_ptr 编程细节(三)
*sp:返回拥有的对象
由于“接受单一 pointer 作为唯一实参”的构造函数是 explicit,
使用便捷函数 make_shared
先声明,再 reset
而 shared_ptr<T>的
也即:
sp1 == sp2
*sp1 == *sp2
比较的是对象是否相等,如果是类类型,类的内部需要给出operator==的实现,否则出错,如果是基本类型,则比较的是其值;
C++基础::shared_ptr 编程细节(二)
C++基础::shared_ptr 编程细节(三)
*sp 与 sp.get()
sp.get():返回存储(所持有)的 pointer,也即被持有物的地址*sp:返回拥有的对象
三种初始化的方法
基本的单参构造shared_ptr<string> pNico(new string("nico"));
由于“接受单一 pointer 作为唯一实参”的构造函数是 explicit,
shared_ptr<string> pNico = new string("nico"); // ERROR shared_ptr<string> pNico{new string("nico")};
使用便捷函数 make_shared
shared_ptr<string> pNico = make_shared<string>("nico");
先声明,再 reset
std::shared_ptr<std::string> pNico; pNico = new std::string("nico"); // ERROR: no assignment for ordinary pointers(对普通指针而言没) pNico.reset(new std::string("nico"));
operator ==(shared_ptr对象的相等性比较)
首先来看 shared_ptr相等操作符(equality operator)的实现形式,
template<class T, class U> inline bool operator==( shared_ptr<T> const & a, shared_ptr<U> const & b) { return a.get() == b.get(); }
而 shared_ptr<T>的
get()成员返回的是所持有物的地址,若不拥有对象则返回 nullptr。
class A { public: A(int){} }; int main(int, char**) { shared_ptr<A> pA = make_shared<A>(5); shared_ptr<A> pA2 = pA; std::cout << std::boolalpha << (pA == pA2) << std::endl; std::cout << (pA.get() == pA2.get()) << std::endl; // true,true // 以上两个判断等价,其实比较的是指针,也即是否指的是同一对象 std::cout << (*pA == *pA2) << s; // ERROR // 此时比较的不是指针,而是对象本身, // 两个类实例的operaotr ==,要求必须在类的内部给出operator==的实现 return 0; }
也即:
sp1 == sp2
sp1.get() == sp2.get()比较的是两个指针是否相同,也即两个 shared_ptr 对象是否持有的是对同一个对象的指针,其实这种比较更为严格,因为这里比较的是
两者是否是同一件东西
*sp1 == *sp2
比较的是对象是否相等,如果是类类型,类的内部需要给出operator==的实现,否则出错,如果是基本类型,则比较的是其值;
相关文章推荐
- C++及C中的 string char指针及char数组
- C语言的原码,反码和补码
- C语言中的位运算
- C语言字符串与字符数组
- C语言 变量的作用域和生命周期
- 【转】嵌入式软件:C语言编码规范
- C++ string类的实现
- C++,软件结构中.Cpp和.h的关系
- C语言的枚举类型
- C语言的联合体的使用总结
- C++的time_t 和 struct tm 类型【s
- HNOI 2013 bzoj 3144 切糕
- HNOI 2013 bzoj 3142 数列
- 面试题一 C/C++面试秘笈之单链表的创建,增删改查及打印
- OpenCV以及C++的头文件的包含方式
- Make VC++ Compiles Fast Through Parallel Compilation
- Google C++命名规范
- C语言的字符数组和字符串的问题
- C++类和对象知识点整理
- c语言随机数