gpt4 book ai didi

c++ - auto_ptr 和 dynamic_pointer_cast

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:37 26 4
gpt4 key购买 nike

如果我想将 dynamic_castshared_ptr 一起使用,我可以使用 dynamic_pointer_cast。如果我想转换 auto_ptr,我该用什么?我假设如下所示。

struct B : A { };
...
auto_ptr<A> base( ... );
auto_ptr<B> derive = dynamic_pointer_cast<B>(base);

我正在为 shared_ptr 使用 boost

最佳答案

auto_ptr<A> base( ... );
if(B* query = dynamic_cast<B>(base.get())) {
// take ownership
base.release();
auto_ptr<B> derived(query);

// use and/or pass derived around here
// ...
} else {
// no dice: leave base as owner
}

既然你已经这样做了,那就重构它,把它放在你选择的命名空间中,然后收工:

// Postcondition:
// where r is the returned pointer and p == from.get()
// EITHER r == 0 AND from.get() == p
// OR r.get() == dynamic_cast<To>(p) AND from == 0
template<typename To, typename From>
std::auto_ptr<To>
dynamic_pointer_cast(std::auto_ptr<From>& from)
{
To* query = dynamic_cast<To>(from.get());
return query ? from.release(), query : 0;
}

关于c++ - auto_ptr 和 dynamic_pointer_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com