推 LPH66:你 new 一個陣列出來後為什麼不用陣列的方式去存取它? 04/03 01:39
用watch看過實際位址確認
onCommand == &onCommand[0]
onCommand+1 == &onCommand[1]
但是
onCommand = new Command(); //ok
&onCommand[0] = new Command(); //不過
&onCommand[1] = new Command(); //不過
onCommand+1 = new Command(); //不過
→ sunneo:onCommand+1得到的是rvalue,是暫時位址,不能拿來assign 04/03 01:40
這無法理解, onCommand+1 不是我用new在記憶體中劃好可以支配的位址嗎?
※ 編輯: deo2000 (60.245.65.143), 04/03/2014 02:42:07
※ 編輯: deo2000 (60.245.65.143), 04/03/2014 02:43:57
推 suhorng: *onCommand = Command(); 04/03 09:34
→ suhorng: *(onCommand + 1) = Command(); 04/03 09:34
→ suhorng: onCommand[0] = Command(); 04/03 09:35
→ suhorng: onCommand[1] = Command(); 04/03 09:35
推 fakewen:樓上這是可行方法嗎? 還有我不大了解原PO第一三航用同一個 04/03 11:37
→ fakewen:onCommand變數去接..這樣不會重複定義嗎? 04/03 11:38
推 chunhsiang:你的觀念不對 這是C++不是JAVA 04/03 12:09
→ chunhsiang:你已經new出一個包N0個Command物件的陣列 04/03 12:12
→ chunhsiang:而非參照的陣列 04/03 12:12
推 amozartea:onCommand +1的地方是非法記憶體耶大哥 04/03 23:07
→ sunneo:*(onCommand+1) 等同於 onCommand[1] 04/04 12:52
最近在學C#所以有點搞混了, 因為C#和Java好像都一定要
執行n次 new Command() 才會建構出n個物件,
剛用建構子cout檢查過, 原來C++ new Command[n] 一次就可以建構n個物件,而不只是ref
我的目的是要在指向 n 個物件的陣列上, 隨時抽換所指的物件 (這是設計模式作業)
那請問在C++要怎麼做呢?? 我查了好幾本書都沒講到這種作法
※ 編輯: deo2000 (1.167.192.145), 04/04/2014 16:29:22
→ bibo9901:你需要的是 array of *Command 04/04 17:26
→ bibo9901:意思就是Command *, 或是乾脆用vector<Command*>更簡單 04/04 17:27
→ bibo9901:更正: ** 04/04 17:27
vector<Command*>很方便, 但是我這不是在趕出貨, 想要先慢慢把指標磨好
用2D 動態arrayr結果變這樣
public:
RemoteControl(int No)
{
cout << "RemoteControl物件 建構開始" << endl;
for(int i=0;i<No;i++)
{
(*ptr_onCommand)+i = new Command();//compiler ERROR 必須是可修改的左值,我覺得這個比較正確
*(ptr_offCommand+i) = new Command();//runtime ERROR 存取違規
}
cout << "RemoteControl物件 建構結束" << endl;
}
※ 編輯: deo2000 (42.78.201.190), 04/04/2014 20:52:35
※ 編輯: deo2000 (42.78.201.190), 04/04/2014 20:54:48