面试——C++智能指针
2017-11-12 本文已影响0人
丑角的晨歌
STL中的智能指针:auto_ptr(deprecated),unique_ptr,shared_ptr,weak_ptr,基础内容,不需赘述
实现一个智能指针,有多少需要注意的地方?
(1)既然是“指针”,当然要实现解引用操作符、箭头操作符(weak_ptr例外);
(2)实现bool操作符,以便于以if(xxx)的形式判断有效性;
explicit operator bool() const
(3)构造函数,注意explicit;
(4)是否需要拷贝构造函数,是否需要右值引用;
(5)是否需要=操作符,要判断是否为自己;
(6)get,reset方法;
(7)weak_ptr有lock()方法,返回一个shared_ptr;
(8)类型转换,static_pointer_cast等;
(9)引用计数的实现方法,由于智能指针可以多次复制,为了后面的复制操作能让之前的指针的引用计数一直变化,所以这个要怎么实现呢;
auto_ptr不能做容器元素,因为拷贝时会引起所有权变更,使原指针失效,容易引起问题(事实上因为这个特性,不建议使用auto_ptr,用unique_ptr代替);
STL中的智能指针均不保证线程安全,提供与基础类型一致的线程安全性(可多线程同时读同一元素,多线程同时写不同元素,其他操作情况结果为未定义);