C++里面普通指针怎么转换成智能指针


 1 #include <iostream>
 2 #include <memory>
 3 
 4 using namespace std;
 5 
 6 class T
 7 {
 8 public:
 9     T()
10     {
11         std::cout << "T()" << std::endl;
12     }
13     
14     ~T()
15     {
16         std::cout << "~T()" << std::endl;
17     }
18 };
19 
20 int main()
21 {
22     {
23         T *t1 = new T();
24     }
25     
26     {
27         T *t2 = new T();
28         std::shared_ptr<T> t3(t2);
29     }
30     
31     return 0;
32 }

运行结果:

 

 

 第28行就是将普通指针转换成了智能指针,出了作用域之后也成功析构了。

 一个普通指针智能转化一次智能指针,之后的操作要在智能指针上进行。

代码:

 1 #include <iostream>
 2 #include <memory>
 3 
 4 using namespace std;
 5 
 6 class T
 7 {
 8 public:
 9     T()
10     {
11         std::cout << "T()" << std::endl;
12     }
13     
14     ~T()
15     {
16         std::cout << "~T()" << std::endl;
17     }
18     
19 private:
20     int t[1024];
21 };
22 
23 int main()
24 {
25     {
26         T *t1 = new T();
27     }
28     
29     {
30         T *t2 = new T();
31         std::shared_ptr<T> t3(t2);
32         
33         std::shared_ptr<T> t4(t2);
34         
35     }
36     
37     return 0;
38 }

类里面定义了一个数组,用于析构释放堆空间时复现问题,否则不容易复现。

运行结果:

 

 31、33行会导致析构两次,产生了内存错误。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM