码迷,mamicode.com
首页 > 编程语言 > 详细

c++ Dynamic Memory (part 2)

时间:2017-05-15 00:43:50      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:disco   unique   ram   points   lib   str   mem   fine   error   

Don‘t use get to initialize or assign another smart pointer.

The code that use the return from get can not delete the pointer

Although the compiler will not complain, it is an error to build another smart pointer to the pointer returned by get

shared_ptr<int> p(new int(42));    // reference count is 1
int *q = p.get();    // ok; but do not delete its pointer
{
    shared_ptr<int> (q);
}    // block ends. q is destroyed, and the memory to which q points is freed
int f = *p;    // undefined. The memory to which p points is freed. 

 

Using Our Own Deletion Code

void end_connection(connection *p)
{
    disconnection(*p);
}

void f(destination &d)
{
    connection c = conn(&d);
    shared_ptr<connection p(&c, end_connection);
    // use the connection
    // when f exists, even if by an exception, the connection resource will be properly closed
}

 

For unique_ptr

Call release() breaks the connection between a unique_ptr and the object it had been managing. Ofter the pointer returned by release() is used to initialized or assign another pointer

unique_ptr<int> p2(new int(42));
p2.release();    // WRONG! P2 will not free the memory, and we have lose the pointer
auto p = p2.release();    // OK, but we must remember to delete p

 

Backward compatibilities auto_ptr

Although auto_ptr is still part of the standard library, programs should use unique_ptr instead.

 

c++ Dynamic Memory (part 2)

标签:disco   unique   ram   points   lib   str   mem   fine   error   

原文地址:http://www.cnblogs.com/TonyYPZhang/p/6854544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!