首页 > 代码库 > c++ Dynamic Memory (part 2)
c++ Dynamic Memory (part 2)
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 1int *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 freedint 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 pointerauto 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。