gpt4 book ai didi

c++ - 使用 shared_ptr 初始化结构

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

我一直遇到一个错误 no matching constructor for initialization of 'std::shared_ptr<void>'这是有道理的,但我不知道从哪里开始。

这是我正在使用的。

#include <memory>                                                                                                                                                             

struct Container {
int type;
std::shared_ptr<void> payload;

Container(int t, const void *p) : type(t), payload(p) { }
};

int main() {
return 0;
}

我正在尝试使用 shared_ptr 制作一个通用容器类型为 void .我打算对类型进行切换,然后将有效负载转换为适当的类型。

我想我可以做类似 Container ctn(1, new Data()); 的事情但我想我也可能有错。

谢谢。

最佳答案

您正在尝试初始化指向 void 的指针带有指向 const void 的指针,这确实是违法的。指针的“智能”并不重要,这对于普通指针也会失败。

您要么需要更改 payload 的类型至 std::shared_ptr<const void> ,或者(可能更多你真正想要的)改变 p 的类型至 void* .


但是请注意,虽然这在技术上可以解决眼前的问题,但它可以引入一个更基本的问题。在这种设计下,payload对它指向的实际类型一无所知,因此它不会调用 Data 的析构函数当最后一个引用消失时。您可能应该重新考虑整个设计以使用适当类型的指针。

关于c++ - 使用 shared_ptr<void> 初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26853309/

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