【发布时间】:2021-03-30 00:17:18
【问题描述】:
我的目标是创建 unique_ptr
struct State1
{
public:
std::string name;
std::string address;
};
int main() {
auto s1 = new State1;
s1->name = "name";
std::cout<<"s1 address: "<<s1<<"\n";
auto v = (void*)s1;
std::cout<<"v address: "<<v<<"\n";
auto p = std::make_unique<void*>(s1);
std::cout<<"p.get address: "<<p.get()<<"\n";
auto r = static_cast<State1*>((void*)p.get());
std::cout<<"r address: "<<r<<"\n";
}
s1 address: 0x55dcf389aeb0
v address: 0x55dcf389aeb0
p.get address: 0x55dcf389b310
r address: 0x55dcf389b310
【问题讨论】:
-
delete p;的p是void*不会很好。您必须将自己的deleter 提供给 unique_ptr,它可以将指针转换为正确的类型以将其删除。 -
“我的目标是创建 unique_ptr
,其中 void* 可以指向任何对象类型。” 我不明白这样做的目的是什么。std::unique_ptr<T>已经可以指向任何T?!? -
"我的目标是创建
unique_ptr<void*>,其中void*可以指向任何对象类型" - 这不是std::unique_ptr的使用方式。你为什么要这个?也许std::any会更有意义?