【发布时间】:2021-06-07 12:58:13
【问题描述】:
我有一个需要使用的 C++ 库,它使用 build() 函数通过原始指针返回带有 new 的对象。我想在使用智能指针时使用这个对象,但到目前为止,我只找到了使用 smart_ptr.reset(build()) 的解决方案,它有效但有点难看。有没有更好的方法或者我必须使用手动内存管理?
对于更多上下文,库中的函数调用return new,我相信您需要在该指针上调用 delete。
How to assign the address of an existing object to a smart pointer? 这是我之前称之为“丑陋”的答案,也是我问是否有更好的方法的原因。
【问题讨论】:
-
可行但有点丑 -- 还是我必须使用手动内存管理? -- 所以你愿意付出使用智能指针,因为它看起来(根据你)“丑陋”?这是一个奇怪的权衡。
-
把丑陋的线放到漂亮的函数里,用that。
-
如果你有一个返回原始拥有指针的遗留函数,添加一个包装器来获得干净的代码似乎很好。
-
对不起,我措辞不好。我并不是说我发现它很丑,而是我读到的答案说它很丑,应该不惜一切代价避免它。由于线程已有 5 年历史,我想知道现在是否有更好的方法。我绝不是说我不想使用智能指针。感谢其他答案,我将使用包装函数来完成。
-
您应该确定谁应该删除该对象。你还是图书馆?也许你应该使用自定义删除器,也许不。
标签: c++ smart-pointers