【发布时间】:2010-12-10 22:58:06
【问题描述】:
我刚刚习惯了使用 std::auto_ptr 的智能指针。
假设我想用 auto_ptr 和普通指针调用一个函数。
auto_ptr<uint32> data_smart(new uint32[123])]);
uint32 data_fix[123];
uint32* data_dumb = new uint32[123];
processData(data_smart);
processData(data_fix);
processData(data_dumb);
不重载的最佳做法是什么?拥有带有 uint32* 参数的 processData 函数?对于这种情况,我可以使用 .get() 将智能指针转换为 uint32* 吗?或者我应该怎么做? 提前致谢!
【问题讨论】:
-
我担心你已经搞砸了,因为使用 auto_ptr 指向一个数组完全有理由让你着火。
-
auto_ptr 是委员会设计的经典例子。啊。改用 boost::scoped_ptr 和 boost::shared_ptr。
-
没有。忽略阵列使用 1 秒。 std::auto_ptr 用于指示所有权语义的转移,因此您使用不正确。它通常在方法 API 中指定,以指示如果您将对象传递给方法,则该方法将获得该对象的所有权。在这种情况下,您应该使用 data_fix (并且最好通过引用来传递 processesData())
标签: c++ smart-pointers