C++之CNoTrackObject类和new delete操作符的重载实例_C 语言

本文实例讲述了C++中CNoTrackObject类和new delete操作符的重载,分享给大家供大家参考。具体如下:

头信息:

复制代码 代码如下:

class CNoTrackObject{ 
public: //在此出过错,没有加public 默认为类的私有变量,MyThreadData继承这个类后也无法访问成员变量 
    void* operator new(size_t nSize); 
    void operator delete(void*); 
    virtual ~CNoTrackObject(){} 
};

实现方法如下:

复制代码 代码如下:

void* CNoTrackObject::operator new(size_t nSize) 

    //申请一块内存 
    void* p = ::GlobalAlloc(GPTR , nSize); 
    return p; 

 
void CNoTrackObject::operator delete(void* p) 

    if (p != NULL) 
    { 
        ::GlobalFree(p); 
    } 
}

使用过程如下:

复制代码 代码如下:

struct MyThreadData:public CNoTrackObject 

    MyThreadData* pNext; 
    int nShortData; 
}; 

for (int i=0;i<10;i++) 
    { 
        <span style="color:#ff0000;">pData = new MyThreadData;</span> 
        pData->nShortData = i; 
        list.AddHead(pData); 
    } 
 
    //遍历链表,释放MyThreadData对象占用的空间 
    pData = (MyThreadData*)list.GetHead(); 
    while(pData != NULL) 
    { 
        MyThreadData* pNextData = pData->pNext; 
        printf("The value is %d\n",pData->nShortData); 
        <span style="color:#ff0000;">delete pData;</span> 
        pData = pNextData; 
    }

   
希望本文所述对大家的C++程序设计有所帮助

时间: 2025-01-24 10:12:31

C++之CNoTrackObject类和new delete操作符的重载实例_C 语言的相关文章

VC++中HTControl控件类之CHTRichEdit富文本编辑控件实例_C 语言

本文所述CHTRichEdit控件类继承自CRichEditCtrl,为了避免CRichEditCtrl的界面风格与CRichEditCtr的滚动条不相协调,因此在CHTRichEdit控件中去掉了CRichEditCtrl的默认滚动条,替换成自己绘制的滚动条,这样就不会破坏整体外观了.替换的滚动条并不需要与默认的滚动条同样的宽度,不受操作系统主题的影响,可以支持任意的宽度,而且在不需要滚动条时它会自动消失,使软件布局不会受到影响. 具体实现代码如下: #if !defined(__CHTRic

Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例_C 语言

 CCControlPotentiometer是电位计按钮,和CCControlSlider的用法很相似.关于控件使用时的一些配置,请参见文章:UI开发之控件类-CCControlButton. bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(!CCLayer::init()); //CCControlPotentiometer参数是底座,进度条,控制按钮图片资源 CCControlPotentiometer * pot

Cocos2d-x UI开发之CCControlColourPicker控件类使用实例_C 语言

CCControlColourPicker实现颜色拾取器的功能.关于控件使用时的一些配置,请参见文章:UI开发之控件类-CCControlButton.下边来看源代码. bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init()); //设置一个显示字符串的label CCLabelTTF * title = CCLabelTTF::create("#128128128","A

利用ace的ACE_Task等类实现线程池的方法详解_C 语言

本代码应该是ace自带的例子了,但是我觉得是非常好的,于是给大家分享一下.注释非常详细啊.头文件 复制代码 代码如下: #ifndef THREAD_POOL_H#define THREAD_POOL_H/* In order to implement a thread pool, we have to have an object that   can create a thread.  The ACE_Task<> is the basis for doing just   such a

C++动态数组类的封装实例_C 语言

C++中的动态数组(Dynamic Array)是指动态分配的.可以根据需求动态增长占用内存的数组.为了实现一个动态数组类的封装,我们需要考虑几个问题:new/delete的使用.内存分配策略.类的四大函数(构造函数.拷贝构造函数.拷贝赋值运算符.析构函数).运算符的重载.涉及到的知识点很多,对此本文只做简单的介绍. 一.内存分配策略 当用new为一个动态数组申请一块内存时,数组中的元素是连续存储的,例如 vector和string.当向一个动态数组添加元素时,如果没有空间容纳新元素,不可能简单

C++ new/delete相关知识点详细解析_C 语言

每个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap).C语言用一堆标准库函数malloc和free在自由存储区中分配存储空间,而C++则用new和delete表达式实现相同的功能. 一.new和delete创建和释放动态数组:数组类型的变量有三个重要的限制:数组长度固定,在编译时必须知道其长度,数组只在定义它的语句内存在.动态数组:长度固定,编译时不必知道其长度,通常是运行时确定:一直存在,直到程序显示释放它.

C++读写INI配置文件的类实例_C 语言

本文实例讲述了C++读写INI配置文件的类.分享给大家供大家参考.具体如下: 1. IniReader.h文件: #ifndef INIREADER_H #define INIREADER_H #include <windows.h> class CIniReader { public: CIniReader(LPCTSTR szFileName); int ReadInteger(LPCTSTR szSection, LPCTSTR szKey, int iDefaultValue); fl

C++实现的链表类实例_C 语言

本文实例讲述了C++实现的链表类.分享给大家供大家参考.具体如下: #include <iostream> using namespace std; class linklist { private: struct node { int data; node *link; }*p; public: linklist(); void append( int num ); void add_as_first( int num ); void addafter( int c, int num );

C++模板类的用法实例_C 语言

本文实例讲述了C++中模板类的用法,分享给大家供大家参考.具体方法如下: //#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public: CSimpleList(int nNextOffset=0); void Construct(int nNextOffset); //接口 BOOL IsEmpty() const; voi