ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++ 类的构造和析构

2019-02-27 09:54:03  阅读:298  来源: 互联网

标签:str int 构造 len c++ another myString 和析构 cout


myString.h

#ifndef MYSTRING_H
#define MYSTRING_H
class myString
{
public:
    myString(const char * s=nullptr);
    myString(const myString & another);//deep 拷贝
    myString& operator=(const myString & another);//赋值 拷贝
    void dis();
    ~myString();
private:
    char *str_;
};
#endif // MYSTRING_H
#include "myString.h"
#include <iostream>
#include <string.h>
int k=1;//构造次数
int kk=1;//析构次数
int cpys=1;//deep 拷贝次数
myString::myString(const char * s)
{
    if(s==nullptr)
    {
        str_=new char[1];//空串
        *str_='\0';
        std::cout<<"空串"<<std::endl;
    }else
    {
        int len=strlen(s)+1;//非空串
        str_=new char[len];//开辟内存空间
        memset(str_,0,len);//初始化
        strcpy(str_,s);//
        std::cout<<"非空串"<<std::endl;
    }
     std::cout<<"myString() 构建"<<k<<"次"<<std::endl;
     k++;
}
myString::myString(const myString & another)//deep 拷贝
{
    int len=strlen(another.str_)+1;
    str_=new char[len];//申请空间
    memset(str_,0,len);//初始化空间
    strcpy(str_,another.str_);
    std::cout<<"myString(const myString & another) deep拷贝"<<cpys<<"次"<<std::endl;
    cpys++;
}
 myString& myString::operator=(const myString & another)//赋值 拷贝
 {
     if(this==&another)
        return *this;
         delete []this->str_;//自己存了  其它对象的地址 为了避免内存泄露
                             //把自己的内存释放掉
     int len=strlen(another.str_)+1;
     str_=new char[len];//申请空间
     memset(str_,0,len);//初始化空间
     strcpy(str_,another.str_);
     return *this;//对象 d1=d2=d3
 }
void myString::dis()
{
    std::cout<<str_<<std::endl;

 
}
myString::~myString()
{
    std::cout<<"~myString() 析构"<<kk<<"次"<<std::endl;
    kk++;
    delete []str_;
}
#include "myString.h"
using namespace std;
// k;//构造次数
// kk;//析构次数
//cpys;//deep 拷贝次数

 
int main()
{

        // myString sc;//myString() k=1 ~myString() kk=1
       // sc.dis();
    myString sc1("canadajksadsdsjfsssssssssssssssssssssssssssssssss");
   // myString sc2(sc1);//用已有对象初始化新对象
   // sc1.dis();
    myString sc3;
    sc3=sc1;
    sc3.dis();
    // cout << "Hello World!" << endl;
    return 0;
}

标签:str,int,构造,len,c++,another,myString,和析构,cout
来源: https://blog.csdn.net/qq_34684524/article/details/87966495

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有