是否使用指针
以下两种从实例调用函数的方式是否有区别?哪个更好?是否使用指针
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