C++提前delete
//////////////////////////////////////
///类析构以后,成员变量内存空间释放,
///函数 和 变量 还是可以引用的
//////////////////////////////////////
#include <iostream>
using namespace std;
class CTest
{
public:
CTest();
~CTest();
void Print() { cout<<"....."<<m_refCount<<endl; }
void AddRef();
void ReleaseRef();
int GetRef() { return m_refCount; }
void destroy();
); return m_ptr;}
int* getPtr(){ return m_ptr; }
void setPtr2(int* p2) { m_ptr2 = p2;}
private:
int m_refCount;
int* m_ptr;
int* m_ptr2;
};
CTest::CTest()
{
m_refCount = ;
m_ptr = NULL;
}
CTest::~CTest()
{
m_refCount = ;
delete m_ptr;//new的内存需要delete释放, 不然内存泄露。 系统只给指针值清空
}
void CTest::AddRef()
{
++m_refCount;
Print();
}
void CTest::ReleaseRef()
{
--m_refCount;
Print();
)
{
delete this;
//return;
Print();
}
}
void CTest::destroy()
{
delete this;
}
int main()
{
CTest* ct = new CTest; //一定要声明为指针,不然delete时会报错。
/*for(int _i = 0; _i < 5; ++_i)
{
ct->AddRef();
}
for(int _i = 0; _i < 6; ++_i)
{
ct->ReleaseRef();
}*/
int *a = NULL;
a = ct->setPtr();
cout<<"&a1 = "<<a<<endl;
cout<<"a1 = "<<(*a)<<endl;
);
ct->setPtr2(b);
delete ct;
cout<<"m_ptr = "<<(ct->getPtr())<<endl;
cout<<"&a1 = "<<a<<endl;
cout<<"a1 = "<<(*a)<<endl;
cout<<"b = "<<*b<<endl;
ct->Print();
//ct->ReleaseRef();
ct->Print();
system("pause");
;
}
C++提前delete的更多相关文章
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候 ...
- 声明提前js变量
声明提前问题相关 js的变量声明语句无论出现在何处,都会先与其他代码首先被执行,使用var声明关键词声明变量的 作用于是当前的执行上下文,有可能是外围函数,或者,当变量声明在函数体之外时,则为全局变量 ...
- C++11 之 delete 和 default
1 特殊成员函数 设计一个类,没有成员函数 (member function),只有数据成员 (member data) class DataOnly { private: std::string ...
- 深入理解JS的delete
原文链接: Understanding delete原文作者: Kangax原文日期: 2010年01月10日 翻译日期: 2014年02月07日 翻译人员: 铁锚 !!!!!!!!草稿版本的翻译完成 ...
- 【转】浅谈 C++ 中的 new/delete 和 new[]/delete[]
在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候 ...
- 浅谈c++ new and delete or new [] and delete []
http://www.cnblogs.com/hazir/p/new_and_delete.html 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问 ...
- C++11 之 " = delete "
1 缺省函数 设计一个类,没有成员函数 (member function),只有成员数据 (member data) class DataOnly { private: std::string st ...
- C++11 之 " = delete "
1 缺省函数 设计一个类,没有成员函数 (member function),只有成员数据 (member data) class DataOnly { private: std::string st ...
- 【M8】了解各种不同意义的new和delete
1.首先考虑new operator,new operator 可以认为做了三件事情:a.调用operator new分配一块内存:b.在这块内存上调用构造方法构造对象:返回指针. 2.operato ...
随机推荐
- java开发常用工具类
package com.rui.util; import java.text.DateFormat; import java.text.DecimalFormat; import java.text. ...
- MUI - Dialog 提示窗
Mui基本简介 MUI不依赖任何第三方JS库,压缩后的JS和CSS文件仅有100+K和60+K MUI的开发手册和下载地址 http://dev.dcloud.net.cn/mui/ui/ https ...
- isset 和empty 两个函数的用法
关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断哦. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SE ...
- c3p0数据库连接池死锁问题
项目进行压力测试的时候,运行大概1小时候,后台抛出以下异常: Nov 9, 2012 1:41:59 AM com.mchange.v2.async.ThreadPoolAsynchronousRun ...
- ArcGIS Server 创建站点失败
前期解决方案中部分解决方法汇总:①安装Server时创建的ArcGIS Server Account (操作系统级别用户,默认用户名arcgis)对创建站点时新建的站点目录arcgisserver文件 ...
- RabbitMQ使用相关笔记
#运行各示例脚本 [1] 1. 下载各语言的示例代码 https://github.com/rabbitmq/rabbitmq-tutorials 2. 安装pip,命令"yum -y in ...
- 转:EntityFramework查询--联合查询(Join,GroupJoin)
首先我们先看一下Join public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this ...
- [LeetCode]题解(python):119 Pascal's Triangle II
题目来源 https://leetcode.com/problems/pascals-triangle-ii/ Given an index k, return the kth row of the ...
- What’s the difference between data mining and data warehousing?
Data mining is the process of finding patterns in a given data set. These patterns can often provide ...
- swift2.0单例
import Foundation public class SwiftSingleton{ var name = "000" public static le ...