第二讲 auto_ptr智能指针

// STL.cpp : 定义控制台应用程序的入口点。
//
//智能指针在其生命周期结束后会自动调用delete
#include "stdafx.h"
#include<iostream>
#include<memory>
using namespace std;

class WebSite
{
public:
    WebSite(int x){i = x;cout << i << "调用构造函数" << endl;}
    ~WebSite(){cout << "调用析构函数" << endl;}
    void output(){cout << "output" << endl;}
private:
    int i;

};
int _tmain(int argc, _TCHAR* argv[])
{
    auto_ptr<WebSite> autop1(new WebSite(4));//定义了一个WebSite类的指针autop
    auto_ptr<WebSite> autop2(new WebSite(7));
    autop1->output();
    cout << autop1.get() << endl;        //得到auto的一个指针
    cout << autop2.get() << endl;
    //autop1.reset();                        //将auto指向NULL
    //cout << autop1.get() << endl;
    ////autop1->output();                    //reset之后auto不可以再使用了

    autop1 = autop2;            //析构原来autop1指向的地址,将autop2指向的之地址赋给autop1。
                                //也就是说智能指针只能对一个对象并保持该地址
    cout << autop1.get() << endl;
    cout << autop2.get() << endl;

    return 0;
}

第二讲 auto_ptr智能指针

时间: 2024-10-26 22:26:36

第二讲 auto_ptr智能指针的相关文章

C++中auto_ptr智能指针

C++中的auto_ptr(俗称智能指针)所做的事情,使用起来就像普通指针,但当其动态分配内存时,不再需要考虑清理问题.当它的生存期结束时,系统会自动清理它指向的内存. 其实auto_ptr是一个模版类(注意实质上还是一个类).主要解决内存泄漏问题. 原理:其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针(!!!其实实质上还是一个类). 0. 先看看如何使用: int * a=new int(5); auto_ptr<int> ap

shared_ptr 和auto_ptr智能指针

shared_ptr:计数的智能指针 它是一个包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除被包装的动态分配的对象.shared_ptr也可以安全地放到标准容器中,并弥补了auto_ptr因为转移语义而不能把指针作为STL容器元素的缺陷. 线程安全性: shared_ptr 本身不是 100% 线程安全的.它的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr

auto_ptr 智能指针(C98)

#include<iostream> using namespace std; void main(){ //auto_ptr for ( int i = 0; i < 100000; i++) { double *p = new double; //智能指针自动完成内存释放 把堆当作栈来处理 //相当于delete p auto_ptr< double> a_p(p); } cin.get(); } 查看任务管理器:

boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照

首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/smart_ptr.hpp> #include<iostream> using namespace std; using namespace boost; struct posix_file { posix_file(const char * file_name)//一个文件类 { cout

为什么auto_ptr智能指针不能作为STL标准容器的元素

为什么auto_ptr不可以作为STL标准容器的元素 假如有这样的一段代码,是否能够运行? ? 1 2 3 4 5 6 7 8 9 int costa_foo() {     vector< auto_ptr<int> > v(10);     int i=0;     for(;i<10;i++)     {           v[i]=auto_ptr<int>(new int(i));     }   } 答案是否定的,甚至这段代码是无法编译通过的. 错误

智能指针auto_ptr详解

概述:C++中有很多种智能指针,auto_ptr就是其中的一种,该智能指针主要是为了解决"因程序异常退出发生的内存泄漏"这类问题的. 我们先来看下面的问题代码 #include<iostream> #include<memory> #include<exception> using namespace std; //一般指针的处理方式 template<typename T> class OldClass { public: OldCla

C++中的智能指针(auto_ptr)

实际上auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,使用它不必每次都手动调用delete去释放内存.当然有利也有弊,也不是完全完美的. 本文从下面的8个方面来总结auto_ptr使用的大部分内容. 1. auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个这样拥有者(auto_ptr).当auto_ptr对象生命

C++智能指针类模板

1.智能指针本质上是一个对象,这个对象可以像原生的一样来进行使用.原因是智能指针对象对应的类中,将指针相关的操作都进行了重载操作处理,所以才会达到这种像是原生的效果. 2.智能指针的意义: 现在C++开发库中最重要的类模板之一 C++中自动内存管理的主要手段 能够在很大程度上避开内存相关的问题 3.在QT中开发库中也提供了智能指针类模板,在STL标准库中也提供了,在c++的标准库忘了什么名了中也提供了智能指针类模板.所以智能指针类模板在C++中的地位很重要 4.STL中的智能指针类模板 auto

第61课 智能指针类模板

1. 智能指针的意义 (1)现代C++开发库中最重要的类模板之一 (2)C++中自动内存管理的主要手段 (3)能够在很大程度上避开内存相关的问题(如内存泄漏.内存的多次释放等) 2. STL中的智能指针 (1)auto_ptr智能指针 ①生命周期结束时,销毁指向的内存空间 ②只能用来管理单个动态创建的对象,而不能管理动态创建的数组.即不能指向堆数组,只能指针堆对象(变量) int* pn = new int[100]; auto_ptr<int> ap(pn); //auto_ptr指向堆数组