智能指针类
指针使用过程中,经常会出现内存泄漏和内存多次被释放。
解决方案:boost库的智能指针
项目开发中,要求开发者使用预先编写的智能指针类对象代替C语言中原生的指针。
智能指针思想
工程中的智能指针是一个类模板
通过构造函数接管申请的内存
通过析构函数确保堆内存被及时释放
通过重载指针运算符*和->来模拟指针的行为
通过重载比较运算符==和!=来模拟指针的比较
为什么不要重载&&和||操作符
&&和||是C++中非常特殊的操作符
&&和||内置实现了短路规则
操作符重载是靠函数重载来完成的
操作数作为函数参数传递
C++的函数参数都会被求值,无法实现短路规则..
#ifndef MYSTRING_H #define MYSTRING_H #include <iostream> using namespace std; class MyString { private: int length; char *str; public: MyString(int length); ~MyString(); void operator=(MyString& str); char operator[](int index); friend ostream& operator<<(ostream& out,MyString str); bool operator ==(MyString &str); bool operator !=(MyString &str); void operator =(char* str); void println(); }; #endif // MYSTRING_H
#include "mystring.h" #include <iostream> using namespace std; #include "string.h" MyString::MyString(int length){ this->length = length; this->str = new char[length]; } MyString::~MyString(){ this->length = 0; delete[]str; } void MyString::operator =(char* str){ int length = strlen(str); this->length = length; strcpy(this->str,str); } void MyString::println(){ cout<<this->str<<endl; } void MyString::operator=(MyString& str){} char MyString::operator[](int index){ return str[index]; } ostream& operator<<(ostream& out,MyString str){ out<<str.str; return out; } bool MyString::operator ==(MyString &str){ if(this->length != str.length){ return false; } return strcmp(this->str,str.str)==0; } bool MyString::operator !=(MyString &str){ return !(*this==str); }
#include <iostream> using namespace std; #include "mystring.h" int main(void) { MyString my(1024); my = "123456789"; my.println(); MyString my2(1024); my2 = "123123"; cout<<my[5]<<endl; bool flag = my==my2; if(flag){ cout<<"equal"<<endl; }else{ cout<<"unequal"<<endl; } cout<<my<<endl; cout << "Hello World!" << endl; return 0; }
时间: 2024-10-12 21:14:13