拷貝建構函式與賦值運算子過載的區別

2021-07-01 21:31:00 字數 1030 閱讀 4976

#include

using

namespace

std;

class test

private:

static

int ctor_count; //only a declaration

};int test::ctor_count=0; // definition + initialization

int main()

以上**執行結果為:

ctor

copy ctor

copy ctor

assignment op

copy ctor

請按任意鍵繼續. . .

分析整個過程,test test;呼叫了預設的建構函式,

test test1=test;test1是乙個新的類例項,尚未定義,此時呼叫拷貝建構函式;

test test2(test);顯式地呼叫拷貝建構函式

test test3=test2=test1;這是乙個連續的賦值,但是這裡是先運算

test2=test1,兩個物件均已例項化,所以這裡呼叫的是賦值運算子。而test test3=test2,中test3未定義,所以這裡呼叫的是拷貝建構函式。

那麼是不是拷貝建構函式未定義時對於新物件的產生,就要使用賦值運算子呢?請看下面**:

#include

using

namespace

std;

class test

test& operator= (const test& r)

private:

static

int ctor_count; //only a declaration

};int test::ctor_count=0; // definition + initialization

int main()

拷貝建構函式與賦值運算子過載

拷貝建構函式 只有單個形參,該形參是對本類型別物件的引用 一般常用const修飾 在用已存在的類型別物件建立新物件時由編譯器自動呼叫。1.拷貝建構函式是建構函式的乙個過載形式 class date date const date d private int year int month int da...

拷貝建構函式與過載賦值運算子

注意 該作者部落格已遷移至 如果乙個建構函式的第乙個引數是自身類型別的引用,且任何額外的引數都有預設值,則此建構函式是拷貝建構函式。c premier裡的定義 拷貝建構函式應用的場景 預設拷貝建構函式 class ctest ctest void test ctest obj intmain 這個程...

拷貝構造與過載賦值運算子

編譯器預設的拷貝建構函式,發生的是memberwise initialization 成員逐一初始化 類的成員變數被逐一複製。而預設賦值運算子,也是逐一複製成員變數。一旦成員變數中,有程式設計師在heap開闢的空間 指標,new 使用預設拷貝建構函式就會引起淺拷貝和深拷貝的問題。include us...