c++ 深拷贝 函数后加const
来源:互联网 发布:windows 创建快捷方式 编辑:程序博客网 时间:2024/06/16 05:20
简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!
#include <iostream>#include <cstring>using namespace std;class MyString{public: MyString(const char*); MyString(int = 0, char = '\0'); //initialize size_t number of char, terminated with '\0' MyString(const MyString&); //copy constructor ~MyString(); //destructor const char* c_str() const; //return private char* static int getNumberOfObjects();private: char *str; static int numberOfObjects; //count the number of MyString objects};int MyString::numberOfObjects = 0;//deep stepMyString::MyString(const char *inputstr) {str = new char[strlen(inputstr) + 1];strcpy(str, inputstr);numberOfObjects++;}//字符串最后一位要自己加空字符MyString::MyString(int size_t, char a) {str = new char[size_t + 1];int i = 0;for(; i < size_t; i++) *(str + i) = a;*(str + i) = '\0'; numberOfObjects++;}// deep copy stepMyString::MyString(const MyString& _str) {const char* t = _str.c_str();str = new char[strlen(t) + 1];strcpy(str, t);numberOfObjects++; }//delete deep copy MyString::~MyString() {//str = 0;if(str != NULL)delete []str;numberOfObjects--;}const char* MyString::c_str() const{return str;}int MyString::getNumberOfObjects() {return numberOfObjects;}
这里有个比较小的细节,在const char* c_str()这个函数后面要加const。
根据TA的解释,是因为不加const的话会导致
const char* t = _str.c_str();这里编译错误,因为传进来的参数声明为const MyString& _str,然后我们直接调用了_str这个对象的成员函数c_str(),它非常担心这个成员函数会改变_str的值(虽然这个函数并不会改变_str的值,可是你不把c_str()这个函数声明为const,它不放心调用啊,万一被改了呢)
0 0
- c++ 深拷贝 函数后加const
- c++ 在函数后加const是什么意思?
- c++ 在函数后加const是什么意思?
- 函数后加const
- 函数后加const
- c++ 在函数后加const是什么含义?
- 虚函数后加const
- 转载:函数后加const
- C++ 函数后加const
- C++ 函数后加const
- c++函数后加const
- 函数后加CONST的意义
- C++函数后加const的意义
- 函数声明后加const的意义
- C++函数后加const的意义
- C++函数后加const的意义
- C++函数后加const的意义
- C++函数后加 const 的意义
- 关于mysql的缓存:query_cache
- 【phpcms-v9】模型字段文件夹下各个文件的作用
- 2016年3月28日学习小结
- nyoj 55
- C
- c++ 深拷贝 函数后加const
- C语言位域精解
- 【phpcms-v9】前台content模块中pc标签的调用说明
- 《iOS Human Interface Guidelines》——Progress View
- 日期选择
- on事件
- css笔记
- SQL_事务
- App调试内存泄露之Context篇