转载请注明出处:
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.
大家可以看上一篇文章,这里已经避免了多次赋值拷贝造成的内存问题。推荐这一种方式。
分享到:
相关推荐
下面给出一个使用指向类成员指针的例子: #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++大学教程(目录) 第1章 计算机与C++编程简介-------------------------------------------------1 1.1 简介--------------------------------------------------------------1 1.2 什么是计算机--------...
◇ 第二章 C++语言基础 - 课前索引 - 第一节 简单的C++程序 - 第二节 标识符和关键字 - 第三节 基本数据类型 - 第四节 变量 - 第五节 常量 - 第六节 枚举类型 - 第七节 输入和输出 - 本章小结 - 课后...
编写程序熟悉对象成员的引用; (3).编写程序熟悉构造函数和析构函数的作用; (4).编写程序熟悉对象数组、对象指针和this指针的使用; (5).编写程序熟悉常对象、常对象成员和常指针的使用; 实验要求: 创建一...
复制构造函数引用this指针静态成员.ppt
实验3-指针与引用的编程 实验4-类与对象的编程 实验5-构造函数与析构函数的编程 实验6-利用静态成员编程 实验7-利用友元编程 实验8-继承和派生的编程 实验9-利用多态编程 实验10-运算符重载编程 实验11- 利用模板...
这个课件详细的介绍了指针和引用的区别,对于C/C++的初学者来说,有很大的帮助,值得学习!
本书延续了Ivor Horton讲解编程语言的独特方法,从中读者可以学习Visual C++ 2005的基础知识,并全面掌握在MFC和Windows Forms中访问数据源的技术。此外,本书各章后面的习题将有助于读者温故而知新,并尽快成为C++...
鸡啄米:C++编程入门系列之二十三(C++程序设计必知:常引用、常对 象和对象的常成员) 鸡啄米:C++编程入门系列之二十四(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++ Primer初级教程,课程内容是学习C++语言基础知识,对应着教材的第1章到第8章。 第1章 快速入门 1.1 编写简单的C++程序 1.2 初窥输入/输出 1.2.1 标准输入与输出对象 1.2.2 一个使用IO库的程序 ...
因为C 是C++的子集,所有的C 的技术都可以继续使 用,但很多用起来又不太合适。例如,C++程序员会认为指针的指针看起来很 古怪,他们会问:为什么不用指针的引用来代替呢? C 是一种简单的语言。它真正提供的只有有...
学会在类中使用指针,包括类中有指针(数组)数据成员、指向对象的指针、指向数据成员的指针、指向成员函数的指针
因为C是C++的子集,所有的C的技术都可以继续使 用,但很多用起来又不太合适。例如,C++程序员会认为指针的指针看起来很 古怪,他们会问:为什么不用指针的引用来代替呢? C是一种简单的语言。它真正提供的只有有宏...
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 修改客户程序 ...
在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法: 代码如下 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd...
第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++基础目录 01_C++基础课程的安排和需要持之以恒的学习态度 02_简单的C++程序helloworld 03_用面向过程和面向对象方法求解圆形面积_类和对象的关系思考_传智扫地僧 04_类中不写成员函数易犯错误模型 05-易...