iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
自我挑戰組

Effective C++ 讀書筆記系列 第 18

[Day 18] Copy all parts of an object (2)

  • 分享至 

  • xImage
  •  

前言

接續昨天的內容,還剩最後一點補充。然後順帶偷渡一點第三章─ Resource Management 的前言介紹XD

copying function不要混用!

昨天提到copying function兩者都需要注意有完整的copy到內容,你也有可能會發現─ copy assignment與copy assign operator,兩者通常長得很像,看到這種類似的內容,你可能會想讓他們其中一個去call另外一個來避免duplicated code,但是,不要衝動!!

copy assignment operator去call copy constructor是不合理的,反之也是。為什麼呢?首先如果copy assignment operator去call copy constructor,你會變成去construct一個已經存在的東西。書本沒有舉例,也不想舉例XD 總之只要類似的嘗試就是錯的,

這邊想傳達的就是這個概念。而反過來也是,因為constructor會初始化新的物件,但copy assignment operator是針對已經存在的物件來做事,所以千萬不要試圖對還沒初始畫過的東西來做初始化的物件做的事。

那如果真的想要讓他們共用程式要怎麼做呢?一樣,再另外弄一個function來讓他們兩個去call,而這也很常見,通常會是init的private function。這才是避免copy functions duplicated code的安全作法。

總結

貼心重點提醒:

  • Copying functions should be sure to copy all of an object's data members and all of its base class parts.
  • Don't try to implement one of the copying functions in terms of the other. Instead, put common functionality in a third function that both call.

而第二章也到這邊結束了,YA!

第三章要看到的是...

過了大半月才終於進入到第三章─Resource Management

C++程式裡面會有哪些"資源"呢?第一個會想到的可能就是memory,畢竟一開始學C++就會學到動態記憶體配置;不過除了memory,其實還有各種resource,包含file descriptorsmutex lockGUI的fonts跟brushesdata base connectionsnetwork sockets...等等。
要管理資源固然麻煩,但若沒有管理好,後續更是後患無窮,所以管理好他們是必須的。這個章節首先會從C++中constructor、destructor與copying operations的運用開始,接著則是其他設計用來管理資源物件的必須注意事項。明天就開始看看如何管理資源吧!

To be continued...


上一篇
[Day 17] Copy all parts of an object (1)
下一篇
[Day 19] Use objects to manage resources
系列文
Effective C++ 讀書筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言