Effective c++ : 构造函数,析构函数和赋值操作符
来源:互联网 发布:it教育网站 编辑:程序博客网 时间:2024/05/16 10:45
/*
构造函数,析构函数和赋值操作符
几乎所有的类都有一个或多个构造函数,一个析构函数和一个赋值操作符。这没什么奇怪的,因为它们提供的都是一些最基本的功能。
构造函数控制对象生成时的基本操作,并保证对象被初始化;析构函数摧毁一个对象并保证它被彻底清除;赋值操作符则给对象一个新的值。
在这些函数上出错就会给整个类带来无尽的负面影响,所以一定要保证其正确性。
本章我将指导如何用这些函数来搭建一个结构良好的类的主干。
构造函数,析构函数和赋值操作符
几乎所有的类都有一个或多个构造函数,一个析构函数和一个赋值操作符。这没什么奇怪的,因为它们提供的都是一些最基本的功能。
构造函数控制对象生成时的基本操作,并保证对象被初始化;析构函数摧毁一个对象并保证它被彻底清除;赋值操作符则给对象一个新的值。
在这些函数上出错就会给整个类带来无尽的负面影响,所以一定要保证其正确性。
本章我将指导如何用这些函数来搭建一个结构良好的类的主干。
*/
/*
条款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
- Effective c++(笔记) 中关于构造函数、析构函数以及赋值操作符的知识
- Effective C++ 2e: 构造函数,析构函数和赋值操作符
- Effective C++笔记(3) 构造函数,析构函数和赋值操作符
- Effective c++ : 构造函数,析构函数和赋值操作符
- 第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)
- Effective C++ 总结3 构造函数,析构函数和赋值操作符 (条款11 - 17)
- Effective C++摘要《第3章:构造函数、析构函数、赋值操作符》20090207
- Effective C++(二)构造、析构和赋值操作
- 学习C++(构造函数,析构函数和赋值操作符)
- 【C\C++学习】之十八、C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
- 字符串类的实现:构造函数、析构函数、复制构造函数和赋值操作符
- Effective C++(十一):为需要动态分配内存的类声明一个复制构造函数和一个赋值操作符
- C++中的拷贝构造函数和拷贝赋值操作符+const成员变量初始化(5)---《Effective C++》
- C++中拒绝编译器自动生成copy构造函数和copy赋值运算符操作(6)---《Effective C++》
- c/c++ 构造函数、拷贝构造函数、析构函数和赋值运算符重载
- 复制构造函数和赋值操作符
- 复制构造函数和赋值操作符
- 拷贝构造函数和赋值操作符
- hdu2199
- 因子和阶乘
- DNS解析的工作原理及递归与迭代的区别
- R语言 apply函数家族详解
- Run Loop
- Effective c++ : 构造函数,析构函数和赋值操作符
- struts2自定义拦截器做登陆模块
- 三句话影响人的一生
- linux /proc/cpuinfo文件分析
- 移动终端浏览器初始设置apple-mobile-web-app-capable
- 择业:硅谷还是北京?
- prim算法
- MySQL双master配置
- 关于struts2学习的开始