2017/03/17学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017/03/17学习笔记相关的知识,希望对你有一定的参考价值。

智能指针类

指针使用过程中,经常会出现内存泄漏和内存多次被释放。
解决方案: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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

DOM探索之基础详解——学习笔记

学习笔记 链接

ReactJs学习笔记01

OpenCV 学习笔记(颜色直方图计算 calcHist)

JSP 学习笔记