13.5. 管理指针成员的13.5.2. 定义值型类 方法

#include <iostream>
#include<string>
#include<set>
using namespace std;

//定义值类型

/*
复制构造函数不再复制指针,它将分配一个新的 int 对象,并初始化该对
象以保存与被复制对象相同的值。每个对象都保存属于自己的 int 值的不同副
本。因为每个对象保存自己的副本,所以析构函数将无条件删除指针。
赋值操作符不需要分配新对象,它只是必须记得给其指针所指向的对象赋新
值,而不是给指针本身赋值
换句话说,改变的是指针所指向的值,而不是指针。即使要将一个对象赋值给它本身,
赋值操作符也必须总是保证
正确。本例中,即使左右操作数相同,操作本质上也是安全的,
因此,不需要显式检查自身赋值。
*/

class hasptr
{
public:
	hasptr(const int& p,int i):ptr(new int(p)),vi(i){}
	hasptr(const hasptr& org):ptr(new int(*org.ptr)),vi(org.vi){}
	hasptr& operator=(const hasptr&);
	~hasptr(){delete ptr;}

	int get_ptr_var()const{return *ptr;}
	int get_int()const{return vi;}

	void set_ptr(int *p){ptr=p;}
	void set_int(int i){vi=i;}

	int* get_ptr()const{return ptr;}
	void set_ptr_vi(int i)const{*ptr=i;}

private:
	int *ptr;
	int vi;
};

hasptr& hasptr::operator=(const hasptr& org)
{
	*ptr=*org.ptr;
	vi=org.vi;
	return *this;
}

int main()
{
	system("pause");
	return 1;
}

  

时间: 2024-10-10 10:28:45

13.5. 管理指针成员的13.5.2. 定义值型类 方法的相关文章

C++ Primer 学习笔记_57_类与数据抽象 --管理指针成员

复制控制 --管理指针成员 引言: 包含指针的类需要特别注意复制控制,原因是复制指针时只是复制了指针中的地址,而不会复制指针指向的对象! 将一个指针复制到另一个指针时,两个指针指向同一对象.当两个指针指向同一对象时,可能使用任一指针改变基础对象.类似地,很可能一个指针删除了一对象时,另一指针的用户还认为基础对象仍然存在.指针成员默认具有与指针对象同样的行为. 大多数C++类采用以下三种方法之一管理指针成员: 1)指针成员采取常规指针型行为:这样的类具有指针的所有缺陷但无需特殊的复制控制! 2)类

C++管理指针成员

1.C++中一般采用下面三种方法之一管理指针成员: (1)指针成员采取常规行为.这样的类具有指针的所有缺陷:具有指针成员且使用默认复制构造函数和赋值操作符,无法避免悬垂指针(两个对象的指针成员指向同一内存,删除了其中一个指针指向的内存时,另一个指针将不再指向有效的内存空间). (2)类可以实现所谓的"智能指针"行为.引入计数类,智能指针类将一个计数器与类的对象相关联.使用计数跟踪该类有多少个对象共享同一指针.当计数为0时,删除对象. (3)类采取值行为.采用重载的复制构造函数.赋值操作

C++ 定义引用型类成员变量

作者 : 卿笃军 1)早在学习C语言的时候,我们就知道,在定义结构体的时候,不能在结构体中定义该结构体类型的变量: struct node { int a; // struct node b; //错 struct node *next; //对 }; 因为,该结构体还在定义中....不知道结构体里面具体有什么内容,所以无法定义对象b.但是可以定义指针*next. 2)现在,C++里面多出来了一个叫引用的东东(很强大): 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样.

《linux 内核完全剖析》chapter 13 内存管理 (不含swap.c)

内存管理(memory.c 和swap.s 部分) "倒着看" 先看memory management,很明显,前面各种阻力,都是因为涉及内存管理.不先看这个,我估计前面看了也是白看 我估算着理论打基础砸了差不多一个星期的时间在memory management上面了...感觉很有收获,是时候用实践(code)印证理论了! <modern operating system>讲内存管理那一章 http://blog.csdn.net/cinmyheart/article/de

C++ 带有指针成员的类处理方式

在一个类中,如果类没有指针成员,一切方便,因为默认合成的析构函数会自动处理所有的内存.但是如果一个类带了指针成员,那么需要我们自己来写一个析构函数来管理内存.在<<c++ primer>> 中写到,如果一个类需要我们自己写析构函数,那么这个类,也会需要我们自己写拷贝构造函数和拷贝赋值函数. 析构函数: 我们这里定义一个类HasPtr,这个类中包含一个int 类型的指针.然后定义一个析构函数,这个函数打印一句话. HasPtr.h 类的头文件 1 #pragma once 2 #if

C++11 指针成员与拷贝构造(浅拷贝与深拷贝)

[1]浅拷贝 一直以来,设计一个类,个人认为,最能体现水平的地方在于:类中含有指针成员变量. 如下一个典型的浅拷贝示例: 1 #include <iostream> 2 using namespace std; 3 4 class HasPtrMem 5 { 6 public: 7 HasPtrMem() : d(new int(0)) 8 {} 9 ~HasPtrMem() 10 { 11 delete d; 12 d = nullptr; 13 } 14 15 int* d; 16 };

[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) JSON序列化利器 Newtonsoft.Json 及 通用Json类

[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) JSON序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能不了解Json.net(Newtonsoft.Json)这款世界级的开源类库,除了拥有良好的性能之外,功能也是非常强大的. 本节会详细说明这个类库.此外,对于不喜欢使用第三方类库的同学,会整理一个基于微软类库的通用Json类. 读前必备: 本节主要介绍一款第三方类库和一个自己整理封装的类库,说起到封装

struct的初始化,拷贝及指针成员的使用技巧

struct是C中重要的ADT.但是在一般讲C的书中,往往只介绍了struct的定义.顺序初始化及位域. 本文将笔者曾经用到的.看到的知识点罗列出来,与大家分享. 为了方便后面的介绍,先定义一个struct类型:         struct User         {             int id;             //id             char name[100];     //user name             char *home;        

15.含有指针成员的类的拷贝(copy constructor)

http://zhedahht.blog.163.com/blog/static/25411174200722710364233/ http://www.cnblogs.com/t427/archive/2012/08/10/2633133.html http://blog.csdn.net/gamecreating/article/details/5382902 http://www.cppblog.com/xczhang/archive/2008/01/21/41569.html 题目:下面