这是不好的风格?

bob*_*obo 2 c++ syntax constructor coding-style call

我最后编写了一些代码:

Asteroid *a = new Asteroid( asteroidCollection ) ;
Run Code Online (Sandbox Code Playgroud)

结果我不需要变量a,因为在Asteroid构造函数中,new Asteroid最终将自己添加到了变量中asteroidCollection.

所以我最终能够写:

new Asteroid( asteroidCollection ) ;
Run Code Online (Sandbox Code Playgroud)

这是不好的风格,考虑到我甚至不需要回报?我应该这样做吗?

asteroidCollection->createNew() ;
Run Code Online (Sandbox Code Playgroud)

要么

asteroidCollection->add( new Asteroid() ) ;
Run Code Online (Sandbox Code Playgroud)

det*_*zed 8

我说这是糟糕的风格,因为当你阅读代码时它会让人感到困惑.首先想到的是你有内存泄漏.只有在查看构造函数内部并确定对象将其自身添加到某个列表以便稍后删除之后,混淆才会消失.

还要考虑可能的异常情况.最好将分配的对象存储在某种智能指针中,然后将其添加到集合中.


Fam*_*eng 5

对于你的问题,我更愿意

asteroidCollection->add( new Asteroid() ) ;
Run Code Online (Sandbox Code Playgroud)

比其他两种风格.

它比第一个好,因为new Asteroid( asteroidCollection ) ;没有比这更好的了

Foo( barCollection ); 
Run Code Online (Sandbox Code Playgroud)

其中Foo是一个类,你new在它的构造函数中是一个Bar对象并将它添加到一个集合中,它太模糊了,不知道发生了什么.

它也比第二个更好,因为IMO asteroidCollection不应该关心如何创建一个Asteroid,它是一个集合,所以做集合做的.