概述
class String
Notes
- class with pointer
- 字符串指针动态分配,‘ ’结束标记
- 三个特殊函数
- 拷贝构造
- 成员变量是字符串指针,默认构造只拷贝了地址,即两个对象指向了同一地址。一方面指向同一地址就很危险,另一方面造成内存泄漏,为浅拷贝
- 深拷贝,重新new内存,拷贝字符串内容,新的对象指向新的地址
- 拷贝赋值
- 传入string对象,判断被赋值对象与传入(赋值)对象是否一致,
- 一致则返回this,效率提高,不自检删除自己后不能进行深拷贝
- 不一致则清理被赋值对象,深拷贝传入(赋值)对象
- 传入string对象,判断被赋值对象与传入(赋值)对象是否一致,
- 析构函数
- 释放对象内存
- 拷贝构造
代码示例
https://gitee.com/NiMiKiss/learning-notes.git
#ifndef __CLASS_STRING__
#define __CLASS_STRING__
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
class String
{
public:
String(const char* cstr = nullptr);
String(const String& str);
String& operator=(const String& str);
~String();
char* get_c_str() const { return m_data; }
private:
char* m_data;
};
inline
String::String(const char* cstr)
{
if (cstr) {
m_data = new char[strlen(cstr) + 1];
strcpy(m_data, cstr);
}
else {
m_data = new char[1];
*m_data = '