以下兩種從實例調用函數的方式是否有區別?哪個更好?是否使用指針
Motor M;
M.moveToPosition(Speed, TargetPosition);
Motor *M;
M->moveToPosition(Speed, TargetPosition);
謝謝!
以下兩種從實例調用函數的方式是否有區別?哪個更好?是否使用指針
Motor M;
M.moveToPosition(Speed, TargetPosition);
Motor *M;
M->moveToPosition(Speed, TargetPosition);
謝謝!
你的第二個版本有Undefined Behavior,因爲指針是未初始化的!
您可以動態分配Motor
類型的對象(即它分配在堆上):
Motor *M = new Motor;
M->moveToPosition(Speed, TargetPosition);
...
delete M;
Smart Pointers將幫助您避免必須記住要刪除堆中分配的對象。
至於哪個更好,恐怕這取決於上下文。除非你有相反的理由,否則通常在C++中,你應該首選自動對象(在堆棧上)到動態對象(在堆上)。
通過智能指針(std :: unique_ptr)指向M會更好。 – 2012-03-22 14:11:56
@MarcinHoppe:當我評論時,我正在添加那篇文章(以及更多)的方式:) – 2012-03-22 14:13:58
第一種方法將調用Motor
構造函數;第二種方法不會,指針將被初始化。
在C++中,儘可能遠離指針。在這裏使用第一種方法。
如果您要動態分配馬達,使用此:
std::unique_ptr<Motor> M(new Motor);
M->moveToPosition(...);
你試過第二次了嗎?!解引用未初始化的指針就是UB,如果這樣運行沒有問題,我會感到驚訝。 – 2012-03-22 14:09:13
編譯不知何故 – 2012-03-22 14:12:46
@ Marwan Dessouki確實編譯,但它不會按預期運行。 – 2012-03-22 14:13:16