std::unique_ptr<void*>
是指向指针的唯一pointer。指向对象的指针与尖头对象分开。换句话说,指针和尖的对象具有不同的地址。指针到空隙的值是指向对象的地址,而指向指向void的指针的值是指向对象的指针的地址。
p.get()
为您提供(即指向指向)唯一指针拥有的对象的地址。为了使指针从(唯一)指针指向Void的指针,您必须通过(唯一的)指针向Void指针进行间接。这给出了等于
void*
和s1
的地址:
v
P.S。您永远不会删除动态分配的
std::cout << *p;
,因此您的内存泄漏。
State1
是指向指针的明智指针。您希望
std::unique_ptr<void*>
作为第一步。
您需要的下一件事就是达到独特的PTR如何删除资源;默认情况下,唯一的PTR只是调用DELETE,这在无效指针上无法使用。 它无法知道存储在空隙指针中的类型,因此无法调用destructor。
unique_ptr<void>
template<class T>
std::unique_ptr<void, void(*)(void*)>
wrap_ptr(T* ptr){
return {ptr, [](void*ptr){ delete static_cast<T*>(ptr); }};
}
我怀疑代码可以做您想要的。 除了一个旁边,cost is掩盖了一个错误消息,说明您做错了什么。避免使用C样式。您正在重新诠释
auto p = wrap_ptr(s1);
((void*)p.get())
应该是一个危险信号。
Adam Nevraumont指出,
void**
不起作用。如果您使用的是
void*
这将用
std::unique_ptr<void*>
代替
c++17
。请记住,如果没有很多额外的工作,就不会编译。 最佳选项是:
使用原始指针std::any
使用
std::unique<void>
用于智能指针支持 +类型安全在
std::unique<std::any>>
上
https://cengizhanvarli.medium.com/what-is-std-any-in-c-76f2575ad37b
https://en.cppreference.com/w/cpp/utility/any
与std::unique_ptr<void>
:相关的问题
当