C++ C+;中不推荐使用的auto#ptr的替代库/模板类+;17

C++ C+;中不推荐使用的auto#ptr的替代库/模板类+;17,c++,replace,auto-ptr,C++,Replace,Auto Ptr,拥有共享的项目库,必须使用各种编译器C++17 C++03等进行编译。因此,如果代码要保持通用,仅使用更好的unique_ptr或不太完美的auto_ptr是不理想的 请查看#ifdef类型的解决方案,但它会变得混乱。 另外,对经过良好尝试和测试的代码进行编辑并不是一个特别有吸引力的想法 是否有人知道一种形式、配合和功能的下拉式替代品,用于auto\u ptr 有和std::unique_ptr和std::auto_ptr可替换为标准::共享ptr和标准::弱ptr由和 而且,当你没有转移所有权

拥有共享的项目库,必须使用各种编译器C++17 C++03等进行编译。因此,如果代码要保持通用,仅使用更好的
unique_ptr
或不太完美的
auto_ptr
是不理想的

请查看#ifdef类型的解决方案,但它会变得混乱。 另外,对经过良好尝试和测试的代码进行编辑并不是一个特别有吸引力的想法

是否有人知道一种形式、配合和功能的下拉式替代品,用于
auto\u ptr

有和<代码>std::unique_ptr和
std::auto_ptr
可替换为<代码>标准::共享ptr和
标准::弱ptr
由和


而且,当你没有转移所有权的意图时,你可以更具表现力。

你可以做的一件事是,如果你有C++11或更高版本,你可以使用
unique\u ptr
,或者以前使用过
shared\u ptr
(甚至
boost::shared\u ptr
如果没有
std::shared\u ptr
)。这将避免
auto_ptr
的问题,如果它只是库的内部,您可以使用一个#ifdef来解析c++03的
auto_ptr
、c++11及更高版本的
unique_ptr
,以及另一个为空或
std::move
,用于所有权转移。如果它是外部的,您不能确保用户不会误用
auto_ptr
BTW,OP似乎对使用宏的解决方案不感兴趣。