SmartPointer Smar指针】的更多相关文章

#include<iostream> using namespace std; // private class for use by HasPtr only class U_Ptr {     /**     *因为在这个例子中所有的复制都是复制的“变量的常引用”,所以将U_Ptr这个变量的use增加,其他的HasPtr的use也会跟随着改变,     *[目标变量一直就只有一个,所有的复制都只是改变指针而已]     */     friend class HasPtr;     int…
main.cpp测试代码 #include "TestSmartPointer" void fun() { SP<TestSmartPointer> sp1=new TestSmartPointer("A"); SP<TestSmartPointer> sp2=sp1; sp1=sp2; } void main() { fun(); //system("pause"); } TestSmartPointer头文件 #pra…
#include<iostream> using namespace std; // 定义仅由HasPtr类使用的U_Ptr类,用于封装使用计数和相关指针 // 这个类的所有成员都是private,我们不希望普通用户使用U_Ptr类,所以它没有任何public成员 // 将HasPtr类设置为友元,使其成员可以访问U_Ptr的成员 class U_Ptr { friend class HasPtr; int *ip; size_t use; U_Ptr() { cout << &q…
指针带给了 C++巨大的灵活性,然而同样也带来无数的问题,悬挂指针,内存泄漏等. int *pInt = new int(1); // Do not forget delete pInt; 智能指针就是一种能够有效避免悬挂指针的方法.通过一个类,来管理指针的复制, delete 等.从而使用户可以放心地使用指针. 一种智能指针的实现方法是,通过一个计数,追踪当前指向同一块地址的指针有多少个, 当没有指针指向这块地址的时候,自动释放资源.从而有效地避免了 内存泄漏 和 悬挂指针问题. // Las…
13.8 Write a smart pointer class. A smart pointer is a data type, usually implemented with templates, that simulates a pointer while also providing automatic garbage collection. It automatically counts the number of references to a SmartPointer<T*>…
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7561235 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露.它的一种通用实现技术是使用引用计数(reference count).智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针.每次创建类的新对象时,初始化指针并将引用计数置为1:当对象作…
编写一个智能指针类.智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动来及回收机制.它会自动记录SmartPointer<T*>对象的引用计数,一旦T类型对象的引用计数为零,就会释放该对象. 解法: 智能指针跟普通指针一样,但它借由自动化内存管理保证了安全性,避免了诸如悬挂指针.内存泄漏和分配失败等问题. 智能指针必须为给定对象的所有引用维护单一引用计数. 实现代码: template<class T> class SmartPointer { public: S…
说起智能指针,不少人都不陌生.比方auto_ptr.shared_ptr.unique_ptr.weak_ptr. 依据shared_ptr的功能,自己仿造也实现了个. 对于shared_ptr这样的智能指针,有一个共享的引用计数器来控制指针对象的销毁,当引用计数器变为0时.则销毁指针指向的对象.对于多线程安全问题,我在代码中使用的Interlocked系列的原子操作函数. 在学习过程中,渐渐学会了RAII(Resource Acquisition Is Initialization),慢慢领略…
在一个类中,如果类没有指针成员,一切方便,因为默认合成的析构函数会自动处理所有的内存.但是如果一个类带了指针成员,那么需要我们自己来写一个析构函数来管理内存.在<<c++ primer>> 中写到,如果一个类需要我们自己写析构函数,那么这个类,也会需要我们自己写拷贝构造函数和拷贝赋值函数. 析构函数: 我们这里定义一个类HasPtr,这个类中包含一个int 类型的指针.然后定义一个析构函数,这个函数打印一句话. HasPtr.h 类的头文件 #pragma once #ifndef…
首先,我要声明auto_ptr是一个坑!auto_ptr是一个坑!auto_ptr是一个坑!重要的事情说三遍!!! 通过上文,我们知道智能指针通过对象去管理指针,在构造对象时完成资源的分配及初始化,在析构对象时完成资源的清理及汕尾工作. 因此,可以得到一份简洁版的智能指针代码: template<typename T> class AutoPtr{ public: //构造函数,完成资源的初始化与分配 AutoPtr(T * ptr = NULL) :_ptr(ptr){} //析构函数,完成…