Effective c++ : 构造函数,析构函数和赋值操作符

/*
构造函数,析构函数和赋值操作符

几乎所有的类都有一个或多个构造函数,一个析构函数和一个赋值操作符。这没什么奇怪的,因为它们提供的都是一些最基本的功能。
构造函数控制对象生成时的基本操作,并保证对象被初始化;析构函数摧毁一个对象并保证它被彻底清除;赋值操作符则给对象一个新的值。
在这些函数上出错就会给整个类带来无尽的负面影响,所以一定要保证其正确性。
本章我将指导如何用这些函数来搭建一个结构良好的类的主干。

*/


/*
条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
拷贝的时候如果没有自定义的拷贝函数,而调用默认的拷贝函数,如果类中有指针,只是对指针进行浅复制。
赋值操作符也一样,使用默认的赋值操作符是浅复制,这两种都会造成多个指针指向一片内存。多个指针指向同一片内存会怎样呢 ?

1、多个对象调用各自的析构函数,多次释放同一片内存,这样造成程序奔溃。

2、如果原理的对象中的指针成员指向一片内存,但是复制的时候修改他指针的指向地址,那么原来的内存没有释放,造成内存的泄露。

*/

#include "vld.h"
#include "vldapi.h"
#include <iostream>
using namespace std;


class MyStr
{
private :
	char* data;
public:
	MyStr(char* str)
	{
		if(str!=NULL)
		{
			data = new char[strlen(str)+1];
			strcpy(data,str);
		}
		else
		{
			data = new char[1];
			data='\0';
		}
	}

	~MyStr()
	{
		delete [] data;
		data=NULL;
	}
};


int main()
{
/* 情况一 <span style="font-family: Arial, Helvetica, sans-serif;">多次释放同一片内存,造成程序崩溃。</span>

	//MyStr str =MyStr("测试");
	//MyStr str_copy_by_operator = str; 多次释放同一片内存,造成程序崩溃。
*/
/*情况二 对象<span style="font-family: Arial, Helvetica, sans-serif;">持有的内存因为指针指向别的地址,所以原来的内存发生了泄露。</span>

	MyStr* str2 =new  MyStr("我持有内存"); 
	MyStr* str3 = new MyStr("我开辟新内存");
	str3 = str2;///str3持有的内存因为指针指向别的空间,所以原来的内存发生了泄露。
	delete str2;
*/
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值