面试OR笔试44——实现智能指针

来源:互联网 发布:我的世界ipad枪械js 编辑:程序博客网 时间:2024/05/18 04:00

题目及要求

1.1 题目描述

实现智能指针。

 

2 解答

2.1 代码

#include <iostream>#include <vector>using namespace std;template<typename T> class Pointer_m {public:Pointer_m(T *p = nullptr) :ptr(p), count(new size_t(1)) {}Pointer_m(const Pointer_m& p) :ptr(p.ptr), count(p.count) {++*count;}~Pointer_m() {if (!--*count) {delete ptr;delete count;ptr = nullptr;}}Pointer_m& operator=(const Pointer_m& p) {if (this != &p) {if (!--*count) {delete ptr;delete count;}ptr = p.ptr;count = p.count;++*count;}return *this;}T& operator*() const { return *ptr; }T* operator->() const { return ptr; }explicit operator bool() const { return !!ptr; }T* get() const { return ptr; }size_t use_count()const { return *count; }bool unique() const { return *count == 1; }friend Pointer_m make_pointer_m(const T&);private:T *ptr;size_t *count;};template<typename T>Pointer_m<T> make_pointer_m(const T& t) {return Pointer_m<T> (new T(t));}int main() {Pointer_m<vector<int>> p, q(make_pointer_m<vector<int>>({ 1,2,3 }));p ? (cout << p.get()) : (cout << "NULL");cout << endl;p = q;p ? (cout << p.get()) : (cout << "NULL");cout << endl;cout << p.use_count() << endl;cout << p->back() << endl;}







原创粉丝点击