拷貝和賦值區別

2021-10-06 14:12:31 字數 1010 閱讀 7481

拷貝是構造行為,狀態取決於用於構造的物件;賦值是對已構造物件進行狀態更新。賦值側重於更新,構造側重於構造。

下面這個語句被識別為構造

string str=

;string strr=str;

//我是構造,不是賦值

下面這個語句被識別為賦值:

string str=

;string strr

strr=str;

//我才是賦值

等號「=」是賦值還是構造取決於左值是否第一次出現。

函式返回值如果是乙個類,那麼返回的物件首先將會被拷貝構造到乙個臨時物件,這個物件是const的。

a fun()

class aa(

const a& a)

a& operator=

(const a& a);~

a()int m_i;};

intmain()

結果如下:

create

create                                     # dd物件建立

create # a物件建立

a copy constructor!

# 返回語句,拷貝構造臨時物件

delete # a物件析構

assignement constructor!

# 返回值賦值

delete # 臨時物件析構

delete # 主程序退出,dd物件析構

無論是拷貝構造還是狀態賦值,最好將其唯一的引數設定為const屬性,這是因為:

python賦值 淺拷貝和深拷貝的區別

首先需要了解下幾個概念 例 當我們寫a python 時,python直譯器幹的事情 建立變數a 建立乙個物件 分配一塊記憶體 來儲存值 python 將變數與物件,通過指標連線起來,從變數到物件的連線稱之為引用 變數引用物件 在這裡插入描述 1 對於非容器型別,如數字,字元,以及其它 原子 型別,...

python賦值 淺拷貝和深拷貝的區別

1 直接賦值 2 淺拷貝 3 深拷貝 直接賦值,就是對物件的引用,複製的是物件的位址值,名字不同,操作的還是同乙個物件。a 1,2 3,4 5 b a print b 1,2 3,4 5 淺拷貝,就是拷貝的是父物件,不會拷貝到內部的子物件 物件中儲存的是位址值,這裡直接拷貝位址值,沒有遞迴拷貝 b ...

賦值和拷貝

a 1,b a,則 a 和 b指向同一id位址即1的位置 我們把1比作一塊林地,a發現了這塊地,然後告訴了鄰居b,a和b都有相同的許可權在這塊地上伐木 a 1,2,3 4,5,6 b copy.copy a 淺拷貝只能轉殖a中第一層 1,2,3 深層中b還是和a指向同乙個 4,5,6 眾泰 b 發現...