接受std :: auto_ptr <Base>的函数可以接受std :: auto_ptr <Derived>

罗齐纳

我想创建一个函数,一个auto_ptrBase类,我想用一个称呼它auto_ptrDerived类。但是我没有完成它。

我尝试使用它没有参考:

void function(std::auto_ptr<Base> ptr);

std::auto_ptr<Derived> derivedPtr( new ... )
function(derivedPtr); // error:  #348: more than one user-defined conversion from
                      // "std::auto_ptr<Derived>" to "std::auto_ptr<Base>" applies

并带有参考:

void function(std::auto_ptr<Base>& ptr);

std::auto_ptr<Derived> derivedPtr( new ... )
function(derivedPtr); //error:  #304: no instance of overloaded function "function" 
                      // matches the argument list

编辑:我知道auto_ptr已过时,但我只能访问C++03并且不能访问boost因此,如果答案将集中在问题本身上,我将不胜感激:)我也理解按值引用函数和auto_ptr的区别。在我的实际代码中,该函数拥有的所有权,auto_ptr因此,如果我可以将转换从转换DerivedBase正常工作那么两者都很好

史蒂夫·杰索普

您可以毫不含糊地进行投放:

function(static_cast<std::auto_ptr<Base> >(derivedPtr));

请注意,要使其正常工作,Base必须具有虚拟析构函数。否则,代码将具有未定义的行为。

产生歧义的原因就像Arne在他的回答中所说-对于调用者来说,是不function带值还是引用是不明显的,因此对于调用者而言,通过调用是否auto_ptr将释放它们,以及是否将其释放,也并不明显。释放是否将其转换为可以正确delete指针的类型模棱两可的转换AFAIK可以阻止您编写如此困难的代码。通过强制转换,您可以在derivedPtr发布的调用代码中将其明确显示。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用-std = c ++ 11解决g ++警告:不建议使用'auto_ptr'

来自分类Dev

如何使用右值初始化std :: auto_ptr?

来自分类Dev

尽管类型在析构函数中完全合格,但std :: auto_ptr会导致崩溃和泄漏

来自分类Dev

尽管类型在析构函数中完全合格,但std :: auto_ptr会导致崩溃和泄漏

来自分类Dev

传递给函数时c ++ auto_ptr被破坏

来自分类Dev

我可以将auto_ptr放入STL容器中吗?

来自分类Dev

如何找到auto_ptr的地址

来自分类Dev

为什么auto_ptr行为异常

来自分类Dev

如何找到auto_ptr的地址

来自分类Dev

如何使用派生类的auto_ptr返回基类的auto_ptr?

来自分类Dev

如何使用派生类的auto_ptr返回基类的auto_ptr?

来自分类Dev

容器和算法中的auto_ptr与unique_ptr

来自分类Dev

与auto_ptr相比,unique_ptr有何优势?

来自分类Dev

为什么unique_ptr的auto_ptr有重载?

来自分类Dev

容器和算法中的auto_ptr与unique_ptr

来自分类Dev

与auto_ptr相比,unique_ptr有何优势?

来自分类Dev

将auto_ptr分配给weak_ptr

来自分类Dev

将std :: unique_ptr <Derived>转换为std :: unique_ptr <Base>

来自分类Dev

使用模板将std :: shared_ptr <Derived>上载到std :: shared_ptr <Base>

来自分类Dev

将std :: unique_ptr <Derived>转换为std :: unique_ptr <Base>

来自分类Dev

使用auto_ptr时出现内存损坏错误

来自分类Dev

将auto_ptr转换为void指针

来自分类Dev

auto_ptr和原始指针之间的const差异?

来自分类Dev

为什么auto_ptr专用于void?

来自分类Dev

auto_ptr和原始指针之间的const差异?

来自分类Dev

如何将auto_ptr添加到向量

来自分类Dev

我如何将 std::make_unique<derived>() 转换为 std::unique_ptr<base>

来自分类Dev

在auto_ptr和unique_ptr之间切换的宏

来自分类Dev

未初始化auto_ptr时,get()是否可靠?

Related 相关文章

  1. 1

    如何使用-std = c ++ 11解决g ++警告:不建议使用'auto_ptr'

  2. 2

    如何使用右值初始化std :: auto_ptr?

  3. 3

    尽管类型在析构函数中完全合格,但std :: auto_ptr会导致崩溃和泄漏

  4. 4

    尽管类型在析构函数中完全合格,但std :: auto_ptr会导致崩溃和泄漏

  5. 5

    传递给函数时c ++ auto_ptr被破坏

  6. 6

    我可以将auto_ptr放入STL容器中吗?

  7. 7

    如何找到auto_ptr的地址

  8. 8

    为什么auto_ptr行为异常

  9. 9

    如何找到auto_ptr的地址

  10. 10

    如何使用派生类的auto_ptr返回基类的auto_ptr?

  11. 11

    如何使用派生类的auto_ptr返回基类的auto_ptr?

  12. 12

    容器和算法中的auto_ptr与unique_ptr

  13. 13

    与auto_ptr相比,unique_ptr有何优势?

  14. 14

    为什么unique_ptr的auto_ptr有重载?

  15. 15

    容器和算法中的auto_ptr与unique_ptr

  16. 16

    与auto_ptr相比,unique_ptr有何优势?

  17. 17

    将auto_ptr分配给weak_ptr

  18. 18

    将std :: unique_ptr <Derived>转换为std :: unique_ptr <Base>

  19. 19

    使用模板将std :: shared_ptr <Derived>上载到std :: shared_ptr <Base>

  20. 20

    将std :: unique_ptr <Derived>转换为std :: unique_ptr <Base>

  21. 21

    使用auto_ptr时出现内存损坏错误

  22. 22

    将auto_ptr转换为void指针

  23. 23

    auto_ptr和原始指针之间的const差异?

  24. 24

    为什么auto_ptr专用于void?

  25. 25

    auto_ptr和原始指针之间的const差异?

  26. 26

    如何将auto_ptr添加到向量

  27. 27

    我如何将 std::make_unique<derived>() 转换为 std::unique_ptr<base>

  28. 28

    在auto_ptr和unique_ptr之间切换的宏

  29. 29

    未初始化auto_ptr时,get()是否可靠?

热门标签

归档