gpt4 book ai didi

c++ - 将 std::shared_ptr 转换为 std::shared_ptr

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

有什么好的方法可以将 shared_ptr<char> 转换为 shared_ptr<unsigned char> 吗?

我想到了以下但它看起来不是很干净。

int main(int argc, char** argv)
{
std::shared_ptr<char> p1 = std::make_shared<char>();

std::shared_ptr<unsigned char> p2 = std::shared_ptr<unsigned char>(
reinterpret_cast<unsigned char*>(p1.get()),
[p1](unsigned char*) {});
}

最佳答案

你正在做的事情有一个现成的功能,reinterpret_pointer_cast :

std::shared_ptr<unsigned char> p2 =
std::reinterpret_pointer_cast<unsigned char>(p1);

生成的指针与原始指针共享所有权。

相比之下,您自己的代码以两个独立的所有权组结束。如果原始组先死亡,您的新指针将悬空!

可以使用p1.get(),如果您使用别名构造函数,还可以与原始指针共享所有权。事实上,这就是这些转换助手的实现方式(参见链接):

std::shared_ptr<unsigned char> p2(p1, reinterpret_cast<unsigned char*>(p1.get()));

这将创建一个共享指针,它与 p1 共享所有权,但将给定的值存储为第二个构造函数参数。

关于c++ - 将 std::shared_ptr<char> 转换为 std::shared_ptr<unsigned char>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42939881/

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