Sunday, January 23, 2022

[c++] 拷贝构造函数

拷贝构造函数

如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下:

classname (const classname &obj) { 

// 构造函数的主体 

}

==========================================================================

#include <iostream>

using namespace std;

class Line

{

   public:

      int getLength( void );

      Line( int len );             // 简单的构造函数

      Line( const Line &obj);  // 拷贝构造函数

      ~Line();                     // 析构函数


   private:

      int *ptr;

};


// 成员函数定义,包括构造函数

Line::Line(int len)

{

    cout << "Normal constructor allocating ptr" << endl;

    // 为指针分配内存

    ptr = new int;

    *ptr = len;

}


Line::Line(const Line &obj)

{

    cout << "Copy constructor allocating ptr." << endl;

    ptr = new int;

   *ptr = *obj.ptr; // copy the value

}


Line::~Line(void)

{

    cout << "Freeing memory!" << endl;

    delete ptr;

}

int Line::getLength( void )

{

    return *ptr;

}

void display(Line obj)

{

   cout << "Length of line : " << obj.getLength() <<endl;

}

// 程序的主函数

int main( )

{

   Line line1(10);

   Line line2 = line1; // 这里也调用了拷贝构造函数

   display(line1);

   display(line2);

   return 0;

}

==================================================================

Normal constructor allocating ptr

Copy constructor allocating ptr.

Copy constructor allocating ptr.

Length of line : 10

Freeing memory!

Copy constructor allocating ptr.

Length of line : 10

Freeing memory!

Freeing memory!

Freeing memory!

No comments:

Post a Comment

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能