zoukankan      html  css  js  c++  java
  • 一个CString的实现 拷贝构造函数的应用

    class CString
    {
      public:
          CString (char* s);
          CString();
        ~CString();
      private:
          char *str;
          int len;
    	  static int num;
    };
     
    CString::CString(char* s)
    {
        len=strlen(s); 
        str=new char(len+1);
    	strcpy(str,s);
    	num++;
    }
     int CString::num=0;
    
    CString::~CString()
    {
       delete[] str;
      num-- } int _tmain(int argc, _TCHAR* argv[]) { CString my("hello"); // std::cout<<my<<std::endl; CString my2=my; return 0; }

    CString my2=my;调用默认赋值运算符
    num++;不会被执行。

    CString my2(my);调用默认拷贝构造函数
    num++;不会被执行。

    这种情况需要自己实现深拷贝构造函数,重载赋值运算符

    拷贝构造函数的参数为什么是引用呢?
    CString::CString(const String& s);
    因为按引用传递不产生对象副本,如果按值传递,
    
    则拷贝构造函数还要调用拷贝构造函数,形成递归调用。

      

  • 相关阅读:
    二分查找
    泛型 学习
    一个时间转换的功能的类
    TCP/IP、Http、Socket的区别
    值得学习的
    popupwindow使背景变暗
    设计模式最好的学习网站
    观察者模式
    数据报的使用
    网络编程server
  • 原文地址:https://www.cnblogs.com/Browneyes/p/6088070.html
Copyright © 2011-2022 走看看