测试代码
#include "stdafx.h"
#include "SmartPt.h"
#include <iostream>
using namespace std;
class A
{
public:
A(int nVal = 0)
{
m_nVal = nVal;
cout << "A::A()" << endl;
}
~A()
{
cout << "A::~A()" << endl;
}
public:
void Print()
{
cout << "A::Print(): value=" << m_nVal << endl;
}
private:
int m_nVal;
};
class B
{
public:
B()
{
cout << "B::B()" << endl;
}
~B()
{
cout << "B::~B()" << endl;
}
public:
void Test()
{
cout << "B::Test()" << endl;
}
};
int main()
{
CSmartPt<A> pa(new A);
CSmartPt<B> pb(new B);
CSmartPt<int> pn(new int[100]);
pa->Print();
pb->Test();
for (int i = 0; i < 100; i++)
{
pn.Get()[i] = i;
}
cout << "Print contents of int arrray.." << endl;
for (int i = 0; i < 100; i++)
{
cout << pn.Get()[i] << "\t";
}
cout << endl;
A* pa1 = new A(123);
pa.Set(pa1);
pa->Print();
A* pa2 = new A(234);
pa = pa2;
return 0;
}
智能指针源代码
#pragma once
#include <Windows.h>
template <class T>
class CSmartPt
{
public:
CSmartPt(T* t)
{
m_pData = t;
}
~CSmartPt(void)
{
Release();
}
public:
BOOL Release()
{
if (!m_pData)
{
return FALSE;
}
delete m_pData;
m_pData = NULL;
return TRUE;
}
T* Get() const
{
return m_pData;
}
BOOL Set(T* t)
{
if (t == m_pData)
{
return FALSE;
}
Release();
m_pData = t;
return TRUE;
}
public:
T& operator * () const
{
return *m_pData;
}
T* operator -> () const
{
return m_pData;
}
T* operator = (T* t)
{
Set(t);
return m_pData;
}
CSmartPt* operator = (CSmartPt* p)
{
Set(p->Get());
return this;
}
private:
T* m_pData;
};
分享到:
相关推荐
智能指针相信大家听说过吧,我理解的智能指针,既是一个C++模板类,重载了指针操作符(->)和(*)操作符,而使它的实例可以"用指针的形式去调用"。 它可以接管任意类型的指针,所以你只需要放心大胆的new出任意对象...
配置文件操作类封装及智能指针实现,具体操作可查看readme或者查看源码即可
简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象...
简单的智能指针的实现代码,有详细的注释及说明
智能指针是c++ 中的一个概念,因为c++ 本身不具备垃圾回收机制,而且指针也不具备构造函数和析构函数,所以为了实现内存( 动态存储区) 的安全回收,必须对指针进行一层封装,而这个封装就是智能指针,其实说白了,...
C++智能指针的原理和实现 智能指针的原理和实现 ⼀、智能指针起因 ⼀、智能指针起因 在C++中,动态内存的管理是由程序员⾃⼰申请和释放的,⽤⼀对运算符完成:new和delete。 new:在动态内存中为对象分配⼀块空间并...
智能指针是使⽤RAII技术(惯⽤⼿法)对裸指针进⾏封装、隔离、管理。 2. 把堆对象转移为栈对象。 为什么使⽤ 为什么使⽤QT智能 智能(smart)指针? 指针? CPP中在使⽤堆内存时我们必须使⽤指针,使⽤指针给我带来便利...
智能指针类对象封装了自动释放内存的功能 从而避免内存泄漏 例如 void remodel(std::string & str) { std::string * ps = new std::string(str); //str = ps; return; //内存泄漏 } void remodel1(std::string &...
智能指针主要⽤于管理在堆上分配的内存,它将普通的指针封装为⼀个栈对象。当栈对象的⽣存周期结束后,会在析构函数中释放掉申请的 内存,从⽽防⽌内存泄漏。简要的说,智能指针利⽤了 C++ 的 RAII 机制,在智能...
智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用...
智能指针的封装 不会的同学可以参考 或者直接使用
主要介绍了C++ 智能指针的模拟实现实例的相关资料,智能指针是一个类,它把普通指针封装起来,能实现和普通指针同样的功能。,需要的朋友可以参考下
智能指针其实是一个类,是对普通指针进行了封装,将其作为参数传入智能指针的构造函数实现绑定。只不过通过运算符重载让它“假装”是一个指针,也可以进行解引用等操作。既然智能指针是一个类,对象都存在于栈上,...
一个ADO的封装类。封装了VC++中的三个智能指针。头文件中有使用说明
之前,为了处理程序中的异常情况,往往需要将指针手动封装到类中,通过析构函数来释放动态分配的内存;现在这一过程就可以交给shared_ptr去做了。 一般我们使用make_shared来获得shared_ptr。 cout<<"test ...
博客【cmake实战十一】com组件方法的简单实现 中的demo 博客地址:... 1.组件必须动态连接; 2.组件必须隐藏(或封装)其内部实现细节。 3.基类智能指针转换为派生类的智能指针使用dynamic_pointer_cast
C++增加了 const 常量、引用、强制类型转换、智能指针、Lambda 匿名 函数、右值引用等新特性,功能语法更为灵活复杂; • C++可复用性高,引入了模板概念,在此基础上实现了 STL 标准模板库, 大大方便了开发...
自己秋招根据面经和基础.../ 继承 / 多态、引用 & 指针、重载与重写、右值引用、智能指针、整形字面量...... 对于C/C++/C++11/C++14的内容都有涉及,但肯定没法做到100%知识点全覆盖,可以根据自己需要后续添加内容。
智能指针,循环队列,循环缓存区,线程封装等
C++更加安全,增加了const常量、引用、四类cast转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)、智能指针、try—catch等等; C++可复用性高,C++引入了模板的概念,后面在此基础上,实现了方便...