C++primer_内存

2018-09-18  本文已影响0人  m风满楼

十二:动态内存

12.1动态内存与智能指针
shared_ptr<string> p1;    // shared_ptr,可以指向string
shared_ptr<T> sp、unique_ptr<T> up:空智能指针,可以指向类型为T的对象。
p:将p用作一个条件判断,若p指向一个对象,则为true。
*p:解引用p,获得它指向的对象。
 p->mem:等价于(*p).mem。
p.get():返回p中保存的指针。要小心使用,若智能指针释放了其对象,返回的指针所指向的对象也就消失了。此函数是为了这样一种情况而设计的:我们需要向不能使用智能指针的代码传递一个内置指针。使用get返回的指针的代码不能delete此指针。
swap(p, q)、p.swap(q):交换p和q中的指针。

shared_ptr独有的操作

 make_shared<T>(args):返回一个shared_ptr,指向一个动态分配的类型为T的对象,使用args初始化此对象。
shared_ptr<int> p2 = make_shared<int>(42);
shared_ptr<string> p3 = make_shared<string>(10, 'a');
shared_ptr<T> p(q):p是shared_ptr q的拷贝;此操作会递增q中的计数器。q中的指针必须能转换为T*,此构造函数是explicit的,q可以是new生成的普通指针。
p = q:p和q都是shared_ptr,所保存的指针必须能相互转换。此操作会递减p的引用计数,递增q的引用计数;若p的引用计数变为0,则将其管理的原内存释放。这里的q不能是普通指针。
p.unique():若p.use_count()为1,则为true,反之为false。
p.use_count():返回与p共享对象的智能指针数量;可能很慢,主要用于调试。
    // p6指向一个动态分配的vector<string>

    auto p6 = make_shared<vector<string>>();

上一篇 下一篇

猜你喜欢

热点阅读