相关疑难解决方法(0)

C++中的new vs*new

我这样做:

MyClass myObject = *new MyClass();
Run Code Online (Sandbox Code Playgroud)

但是很多人说我应该这样做:

MyClass *myObject = new MyClass();
Run Code Online (Sandbox Code Playgroud)

是否存在性能差异.或者完全使用第二种方法的逻辑原因?我只是喜欢使用第一种方法摆脱指针混淆.

c++ stack pointers dynamic

15
推荐指数
3
解决办法
1659
查看次数

返回一个需要由智能指针保持的"指针"

我有一个项目,我想更多地使用智能指针.总的来说,我在这个目标上取得了成功.但是,我遇到过一些我不确定"最佳实践"是什么的事情.

基本上我想从函数返回一个"指针",但要求用户将它保存在智能指针中.不仅如此,我不想强​​制使用特定的智能指针(共享与范围).

问题主要在于似乎没有适当的方法将a升级scoped_ptr为a shared_ptr(这是我认为的理想解决方案).我明白为什么他们不这样做,因为它会允许转让所有权,这可能导致一些像这样的问题std::auto_ptr.

但是,对于这种情况,转让所有权似乎是一个好主意.所以我的想法是这样的:

// contrived example of factory pattern
std::auto_ptr<A> func() { return std::auto_ptr<A>(new A); }
Run Code Online (Sandbox Code Playgroud)

因为两者都有"好",scoped_ptr并且shared_ptr拥有从a获得所有权的构造函数std::auto_ptr.

所以我的问题是,这是一个好习惯吗?有更好的解决方案吗?我能够想出的唯一真正的替代方法是使用模板模板作为返回值,如下所示:

// similar to above example
template <template <typename> class P>
P<A> func() { return P<A>(new A); }
Run Code Online (Sandbox Code Playgroud)

实际上可以很好地工作,除了我认为它需要一些工作来使它与它一起工作scoped_ptr.

思考?

c++ boost tr1

9
推荐指数
1
解决办法
618
查看次数

标签 统计

c++ ×2

boost ×1

dynamic ×1

pointers ×1

stack ×1

tr1 ×1