浅拷贝——C++编译器默认提供的拷贝构造函数
来源:互联网 发布:java程序员桌面壁纸 编辑:程序博客网 时间:2024/05/19 16:35
浅拷贝与深拷贝区别:在执行拷贝动作时,浅拷贝只会执行简单的赋值动作。
遇到类成员变量是指针类型时,由于会直接将指针本身拷贝过去,导致有几个指针指向同一片内存,以致于最后在调用析构函数时会对同一片内存区域释放多次。
#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Vertify{public: Vertify(const char* name) { this->size_ = strlen(name); this->pName_ = new char[size_ + 1]; strcpy(pName_, name); } ~Vertify() { if (NULL != pName_) { delete pName_; pName_ = NULL; } size_ = 0; }public: int size_; char* pName_;};int main(){ { Vertify v1("hello ,tomorrow!"); //调用编译器提供的拷贝构造函数,而默认提供的拷贝构造函数执行的是浅拷贝 Vertify v2 = v1; }//栈对象在{}执行完之后,内存释放,调用析构函数时对同一片内存释放两次,导致程序崩溃。 cin.get(); return 0;}
解决方案:提供一个拷贝构造函数//对症下药,指针变量需要重新分配内存以获得不同的地址值,这样delete时不会重复释放内存。 Vertify(const Vertify & obj) { this->size_ = obj.size_; this->pName_ = new char[size_ + 1]; strcpy(pName_, obj.pName_); }
0 0
- 浅拷贝——C++编译器默认提供的拷贝构造函数
- C++编译器何时提供默认的构造函数和拷贝构造函数
- C++编译器何时提供默认的构造函数和拷贝构造函数 .
- 浅拷贝——C++编译器默认提供的赋值运算符
- c++默认的拷贝构造函数是浅拷贝
- C++编译器合成默认构造函数的条件(合成默认拷贝构造函数雷同)
- 默认拷贝构造函数,浅拷贝,深拷贝
- 默认拷贝构造函数,浅拷贝,深拷贝
- .默认拷贝构造函数,浅拷贝,深拷贝
- 默认拷贝构造函数,浅拷贝,深拷贝
- 默认拷贝构造函数,浅拷贝,深拷贝
- 默认拷贝构造函数,浅拷贝,深拷贝
- 默认拷贝构造函数 浅拷贝 深拷贝 C++
- C++拷贝构造函数——深拷贝/浅拷贝
- 自定义拷贝构造函数&&默认的拷贝构造函数
- 默认拷贝构造函数
- 拷贝构造函数--默认拷贝构造函数
- 类 的默认拷贝构造是浅拷贝。 若要深拷贝,则需要自己重写拷贝构造函数。
- 【Spring MVC】Spring MVC启动过程源码分析
- 隐式Intent
- Ubuntu 关于引起更新源索引(apt-get update)时Hash Sum mismatch的问题
- Android开发中高效的数据结构用SparseArray代替HashMap
- 监听和屏蔽Enter键的输入
- 浅拷贝——C++编译器默认提供的拷贝构造函数
- OnItemClickListener和OnItemSelectedListener的区别
- Anntation(注解)-----Java之辅助工具(大有前途)
- Oracle 模式
- Hibernate之主键的映射
- Data Binding 用户指南(Android)
- ubuntu 安装时没有设置root密码,如何登陆root
- 变频器主要功率元器件损耗分析
- wampserver You don't have permission to access / on this server. 解决 方法