码迷,mamicode.com
首页 > 其他好文 > 详细

2017/03/17学习笔记

时间:2017-03-17 23:45:57      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:space   else   内存   项目开发   指针运算   lag   思想   stream   内存泄漏   

智能指针类

指针使用过程中,经常会出现内存泄漏和内存多次被释放。
解决方案: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;
}

 

2017/03/17学习笔记

标签:space   else   内存   项目开发   指针运算   lag   思想   stream   内存泄漏   

原文地址:http://www.cnblogs.com/dafume/p/6569008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!