`
v5browser
  • 浏览: 1138985 次
社区版块
存档分类
最新评论

C++成员是指针的处理(二)-引用技术

 
阅读更多

转载请注明出处:

http://blog.csdn.net/xcysuccess3/

在学习完IOS之后,觉得C++的拷贝构造函数和赋值函数可以用IOS方式实现。节约内存和时间。试着写了一下

B.h

//
//  B.h
//  Memory
//
//  Created by xiangchenyu on 13-3-10.
//  Copyright (c) 2013年 xiangchenyu. All rights reserved.
//

#ifndef Memory_B_h
#define Memory_B_h

class A
{
private:
    int size;
    int* pStr;
    int* count; //作为引用计数,此处应该使用指针,使所有的对象,都共享同一块内存地址
    
public:
    A(int size):size(0),pStr(0),count(new int)
    {
        *count = 1;
        this->size = size;
        this->pStr = new int(size);
    }
    ~A()
    {
        Release();
    }
    void setValue(int index,const int& value)
    {
        if(index<this->size)
            pStr[index] = value;
    }
    
    int getValue(int index) const
    {
        if(index<this->size)
            return pStr[index];
        else
            return int();
    }
public:
    //拷贝构造函数
    A(const A& a):size(a.size),pStr(a.pStr),count(new int)
    {
        ++(*count);
    }
    //赋值函数
    const A& operator=(const A& a)
    {
        if(this == &a)
            return *this;
        //类同IOS,旧对象释放,新对象引用计数+1,赋值给旧对象
        Release();
        
        this->size = a.size;
        this->pStr = a.pStr;
        
        ++(*count);
        
        return *this;
    };
private:
    void Release()
    {
        (*count)--;
        if((*count) == 0)
        {
            if(this->pStr)
            {
                delete []pStr;
                pStr = NULL;
            }
            delete count;
            count = NULL;
        }
       
    }

};

#endif

函数调用的地方:

 [super viewDidLoad];
    A a(10);
    a.setValue(0, 555);
    A a1 = a;
    
    NSLog(@"a1-->%d",a1.getValue(0));

结果仍然是555.

大家可以看上一篇文章,这里已经避免了多次赋值拷贝造成的内存问题。推荐这一种方式。

分享到:
评论

相关推荐

    C++对象和指针的引用

    下面给出一个使用指向类成员指针的例子: #include class A { public: A(int i) { a=i; } int fun(int b) { return a*c+b; } int c; private: int a; }; void main() { A x(8); //定义类A的一个...

    C++编程思想--引用和拷贝构造函数

    C++中的指针、引用,参数传递规则,拷贝构造函数(传值方式、缺省的拷贝构造),成员指针

    C++大学教程

    C++大学教程(目录) 第1章 计算机与C++编程简介-------------------------------------------------1 1.1 简介--------------------------------------------------------------1 1.2 什么是计算机--------...

    清华大学计算机课程之《C++程序设计》

    ◇ 第二章 C++语言基础 - 课前索引 - 第一节 简单的C++程序 - 第二节 标识符和关键字 - 第三节 基本数据类型 - 第四节 变量 - 第五节 常量 - 第六节 枚举类型 - 第七节 输入和输出 - 本章小结 - 课后...

    C++高级程序设计实验报告-实验四类的应用

    编写程序熟悉对象成员的引用; (3).编写程序熟悉构造函数和析构函数的作用; (4).编写程序熟悉对象数组、对象指针和this指针的使用; (5).编写程序熟悉常对象、常对象成员和常指针的使用; 实验要求: 创建一...

    复制构造函数引用this指针静态成员

    复制构造函数引用this指针静态成员.ppt

    C++实验1-13,包含完整程序、注释、报告

    实验3-指针与引用的编程 实验4-类与对象的编程 实验5-构造函数与析构函数的编程 实验6-利用静态成员编程 实验7-利用友元编程 实验8-继承和派生的编程 实验9-利用多态编程 实验10-运算符重载编程 实验11- 利用模板...

    指针和引用的区别

    这个课件详细的介绍了指针和引用的区别,对于C/C++的初学者来说,有很大的帮助,值得学习!

    Visual C++ 2005入门经典--源代码及课后练习答案

    本书延续了Ivor Horton讲解编程语言的独特方法,从中读者可以学习Visual C++ 2005的基础知识,并全面掌握在MFC和Windows Forms中访问数据源的技术。此外,本书各章后面的习题将有助于读者温故而知新,并尽快成为C++...

    鸡啄米:C++编程入门系列

    鸡啄米:C++编程入门系列之二十三(C++程序设计必知:常引用、常对 象和对象的常成员) 鸡啄米:C++编程入门系列之二十四(C++程序设计必知:多文件结构和 编译预处理命令) 第六部分:数组、指针和字符串 鸡...

    【全新正版】现代C++程序设计(原书第2版)

    第5章 函数二:变量地址、指针以及引用 5.1 数据变量和内存 5.1.1 sizeof运算符 5.1.2 预留内存 5.1.3 计算机内存和十六进制 5.2 取地址运算符& 5.3 指针 5.4 函数、指针以及间接运算符 5.4.1 解决思路 5.4.2 指针和...

    非常经典的c++ primer视频教程6-10

    本课程是C++ Primer初级教程,课程内容是学习C++语言基础知识,对应着教材的第1章到第8章。 第1章 快速入门 1.1 编写简单的C++程序 1.2 初窥输入/输出 1.2.1 标准输入与输出对象 1.2.2 一个使用IO库的程序 ...

    从c到c++ EFFECTIVE_C++2E

    因为C 是C++的子集,所有的C 的技术都可以继续使 用,但很多用起来又不太合适。例如,C++程序员会认为指针的指针看起来很 古怪,他们会问:为什么不用指针的引用来代替呢? C 是一种简单的语言。它真正提供的只有有...

    类中使用指针和引用

    学会在类中使用指针,包括类中有指针(数组)数据成员、指向对象的指针、指向数据成员的指针、指向成员函数的指针

    Effective C++(第二版).

    因为C是C++的子集,所有的C的技术都可以继续使 用,但很多用起来又不太合适。例如,C++程序员会认为指针的指针看起来很 古怪,他们会问:为什么不用指针的引用来代替呢? C是一种简单的语言。它真正提供的只有有宏...

    Visual C++实践与提高-COM和COM+篇『PDF』

    2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 ...

    C++MFC教程

    在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法: 代码如下 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd...

    现代C++程序设计

    第5章 函数二:变量地址、指针以及引用 5.1 数据变量和内存 5.1.1 sizeof运算符 5.1.2 预留内存 5.1.3 计算机内存和十六进制 5.2 取地址运算符& 5.3 指针 5.4 函数、指针以及间接运算符 5.4.1 解决思路 5.4.2 指针...

    c-c++及数据结构基础视频教程完整版,最适合自学的c++基础

    第二部分C++基础目录 01_C++基础课程的安排和需要持之以恒的学习态度 02_简单的C++程序helloworld 03_用面向过程和面向对象方法求解圆形面积_类和对象的关系思考_传智扫地僧 04_类中不写成员函数易犯错误模型 05-易...

Global site tag (gtag.js) - Google Analytics