2011年3月7日 星期一

怎麼設定物件陣列初始值

作者: loveme00835 (最愛朴素妍) 看板: C_and_CPP
標題: Re: [問題]怎麼設定物件陣列初始值
時間: Sun Feb 20 10:09:26 2011

※ 引述《cool79518 (吃飯睡覺打東東)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 問題(Question):
: 有搜尋過板上,但是沒有我要的答案。
: ,我想給定物件陣列的初始值,如果要像一般把陣列內容的值都設0等方式要如何設定?
: 餵入的資料(Input):
: 預期的正確結果(Expected Output):
: 錯誤結果(Wrong Output):
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: http://nopaste.csie.org/8879a
: 補充說明(Supplement):


誤會大了, 陣列給初值有4種情況:

1.不給初值
  Object b[ 3 ];
  呼叫該類別的 trivial ctor來建構物件, 除非你寫了 default ctor
  , 不然不做任何初始化動作.

2.用 trivial ctor初始化各元素
  Object b[ 3 ] = {};
  與(1)類似, 不過內建的數值型態都會被初始化為0.

3.所有元素都給初值
  Obecjt b[ 3 ] = { Object("1"), 2, 3.0 };
  每一個元素在建構時都呼叫1個參數的建構子, 用初值的型態來決定
  要呼叫的版本.

4.只給部份的初值
  Object b[ 3 ] = { 1 };
  第0個元素以「參數為1個整數的建構子」來建構, 其餘的元素皆用
  trivial ctor 來建構.( (2)跟(3)的綜合體 )


元素一多用上面的 case 3就不切實際了, 下面提出 3 種解法, 不過
語意都不太一樣.

1.使用 default ctor來建構物件, 並用靜態成員來當作初值的來源
  (不推薦使用)
  http://codepad.org/2Nk0txRQ

2.使用 default ctor來建構物件, 建構結束再賦予新值, 需要 copy
  assignment (效率較差).
  http://codepad.org/16WP8ar5

3.再來是我覺得比較好的方法, 使用 std::uninitialized_fill直接
  建構物件, 不需要你硬寫 default ctor, 缺點就是要注意 new 和
  delete 要成對, 以及離開前要記得呼叫解構子.
  http://codepad.org/3cIgObOk

另外也可以考慮 std::allocator, 要做的工作「比較」少一些.

--
[m     ◢████ ◢█    ◢██◣ ◢█   ◢███  ◢█    [35mT-ara [m版怎麼去 [m
     [1;36m████ [m◤ [1;36m █ [m█  [1;33m◢██ [47m◣ [m█ [1;33m█ [m█   [1;35m███ [m█  [1;35m█ [m█        [32ms [m~> [35mT-ara [m
     [1;36m█ [;30;47m/ [m███ [1;36m█ [m█  [1;33m█ [m█  [1;33m█ [m█ [1;33m█ [;30;47m/ [m█ ◢█ [1;35m█ [m█  [1;35m█ [;30;47m/ [m█          [m歡迎您的光臨 [m
     [1;36m████ [m◤ [1;36m█ [m█  [1;33m█ [m█  [1;33m█ [m█ [1;33m██ [m◤ [1;35m███ [m◤  [1;35m██ [m◤  [1;31m恩靜 [m、 [1;32m智妍 [m、 [1;33m孝敏 [m
     [1;36m█ [;30;47m/ [m███ [1;36m█ [m█  [1;33m█ [;30;47m/ [m█ [1;33m█ [m◤ [1;33m█ [m█   [1;35m█ [;30;47m/ [m██ [30;47m  [1;35m█ [m█    [1;34m素妍 [m、 [1;35m居麗 [m、 [1;36m寶藍 [m
     [1;36m████ [m◤ [1;36m█ [m◤  [1;33m◥██◤   █ [m◤   [1;35m████ [m◤ [1;35m█ [m◤    [1m花英 [m  [1;32mψmakigoto123 [m

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835     來自: 140.121.197.115      (02/20 10:25)

沒有留言:

張貼留言

您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.