Effective C++ .13使用智能指针来引用资源

#include <iostream>
#include <cstdlib>
#include <memory>
using namespace std;

class Kiwi {
private:
    int weight;
public:
    Kiwi(int w) : weight(w) {}
    ~Kiwi() {
        cout<<"~Kiwi"<<endl;
    }
    int getWeight() {return weight;}
};

void driven() {
    shared_ptr<Kiwi> p(new Kiwi(100));
    cout<<p->getWeight()<<endl;

    shared_ptr<Kiwi> q = p;
    cout<<p->getWeight()<<endl;
    cout<<q->getWeight()<<endl;

}

int main() {
    cout<<"test start"<<endl;
    driven();
    cout<<"test end"<<endl;
    return 0;
}

auto_ptr同时只能有一个指向资源

shared_ptr同时可以有多个指向资源

时间: 2024-10-29 10:46:07

Effective C++ .13使用智能指针来引用资源的相关文章

智能指针循环引用--转

在智能指针中shared_ptr用来计算指向对象的指针的个数,但是如果先执行shared_ptr1=shared_ptr2,再执行shared_ptr2=shared_ptr1,这样shared_ptr1.count()和shared_ptr2.count()都为1,这就造成了循环引用,循环引用会导致堆内存无法正确释放,导致内存泄露. 考虑一个简单的对象--家长与子女:a Parent has a Child,a Child Knows his parent.在C++中,如果使用原始指针作为成员

[C++] 智能指针的引用计数如何实现?—— 所有该类的对象共享静态类成员变量

问:智能指针可以对指针的引用数量进行计数,一个智能指针释放时,别的智能指针怎么知道的? 这是一个脑筋急转弯题.... 不像普通的变量,静态成员变量是被所有类对象共享的,不同的对象可以访问对方的该静态成员变量,因此静态成员变量和类对象并没有联系. The static keyword has another meaning when applied to global variables -- it gives them internal linkage (which restricts them

【校招面试 之 C++】第13题 C++ 指针和引用的区别

1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址. 而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元. (2)可以有const指

C++11智能指针和引用

最近在学习课程的时候发现一个很困惑的问题,上代码 class DataHeader; class LoginResult:public DataHeader; typedef std::shared_ptr<DataHeader> DataHeaerPtr; //原型 void addSendTask(ClientSocketPtr& pClient, DataHeaderPtr& header) //未报错调用 DataHeaderPtr ret = std::make_sh

引用计数的智能指针的实现

引用计数的智能指针是对<Effective C++ 条款13:以对象管理资源>的一个实现. 我们要设计一个智能指针,使他能够管理资源,在正确的实际调用资源的析构函数. 首先我们需要一个指针reference来指向资源,当智能指针构造时,用reference指针指向资源,在我们确定资源应该被析构时,我们对reference指针进行delete. 如果只有reference指针的话,只能实现出auto_ptr的效果,我们还需要添加引用计数系统counter来统计指向资源的智能指针的个数.count

Effective 学习之以独立语句将newed对象置入智能指针

时间:2014.05.23 地点:基地 --------------------------------------------------------------------------------- 一.常识 C/C++中函数在被调用时,函数的参数的执行顺序是不确定的. --------------------------------------------------------------------------------- 二.问题 假设有两个函数,一个揭示处理程序的优先权,还一个用

Binder学习笔记(十一)—— 智能指针

轻量级指针 Binder的学习历程爬到驱动的半山腰明显感觉越来越陡峭,停下业务层的学习,补补基础层知识吧,这首当其冲的就是智能指针了,智能指针的影子在Android源码中随处可见.打开frameworkds/rs/cpp/util,RefBase.h和StrongPointer.h两个文件,代码多读几遍都能读懂,可是串起来总感觉摸不到骨架,把不住主线.闭上眼零零星星的点串不成一条线.究其原因应该是此处使用了模式,最好先剔除掉业务层的皮肉,把模式的骨架摸个门清,再回来看代码就会势如破竹了. 不是多

boost智能指针之shared_ptr和weak_ptr

std::auto_ptr很多的时候并不能满足我们的要求,比如auto_ptr不能用作STL容器的元素.boost的smart_ptr中提供了4种智能指针和2种智能指针数组来作为std::auto_ptr的补充. shared_ptr<boost/shared_ptr.hpp>:使用shared_ptr进行对象的生存期自动管理,使得分享资源所有权变得有效且安全. weak_ptr<boost/weak_ptr.hpp>:weak_ptr 是 shared_ptr 的观察员.它不会干

智能指针和前置声明之间的小问题

对比Go等其他语言的工程,C++工程让人痛苦的一件事情就是当工程稍微庞大一点,编译时间就蹭蹭蹭往上爬.一般来说看过Effective C++这本书或者其他类似书籍的人都知道要解决编译时长的问题,就要解决好和头文件之间的依赖关系.所以在任何必要的时候要首先考虑使用前置声明而不是之间include头文件.也就是说,在定义类的时候成员变量如果是自定义类型,可以考虑将其声明为指针类型或者是配合智能指针.函数传参时也是一样,使用指针或者引用. 对于一个C工程来说,因为没有智能指针和引用的概念,所以都是直接