__shared_ptr<_Tp, _Lp>::__shared_ptr(_Tp1*) [with _Tp1 = void; _Tp = A; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]': C:/tools/mingw64/x86_64-w64-mingw32/include/c++/bits/shared_ptr_base.h:1023:4: required from 'void std::__shared_ptr<_Tp, _...
1.2 为什么不用shared_ptr<void> 使用shared_ptr<void>代替void*可以解决声明周期管理的问题。shared_ptr有足够的类型信息以了解如何正确销毁它指向的对象。 structday{ // ...things... std::shared_ptr<void> user_data; }; structmonth{ std::vector<day> days; std::shared_ptr<void> user_data; };...
智能指针分2种 shared_ptr(译为共享指针)和unique_ptr(译为独有指针)。他们的本质和一般的指针相同,同时具有不同的特性。介绍之前不得不简介new()和delete( )。 1.new( ),delete( ) C语言中常用malloc 函数动态规划内存并用free(ptr) , 释放内存。同理,C++采用new( ) 来创建,delete( ) 删除。 new< ...
假设你不能改变PrintA的声明,你的PrintA定义应该是这样的:
由于std::shared_ptr<void>不持有类型信息,因此std::dynamic_pointer_cast无法用于std::shared_ptr<void>的转换。std::reinterpret_pointer_cast是C++23中新增的一个转换函数,可以用于在任意类型之间进行智能指针的转换,但它是危险的,因为它不检查类型兼容性。 3. 学习转换函数的用法 std::static_...
使用智能指针和类型信息: 你可以使用智能指针,如std::unique_ptr或std::shared_ptr,并在它们内部存储...
使用shared_ptr<void>代替void*可以解决声明周期管理的问题。shared_ptr有足够的类型信息以了解如何正确销毁它指向的对象。但是std::shared_ptr和void*一样不能解决类型安全的问题。 最后在使用了shared_ptr<void>在SDK内部进行类型强转时报错: /Library/android-ndk-r17c/sources/cxx-stl/llvm-libc++/include/memor...
std::shared_ptr<void>的行为 那么这个跟std::shared_ptr<void>有什么关系呢? 先看一段代码 #include <iostream>usingnamespacestd;classFoo {public: Foo() { cout<<"Foo()"<<endl; }~Foo() { cout <<"~Foo()"<<endl; } };intmain(intargc,constchar*argv[]) { ...
只有当原始的std::shared_ptr<void>一开始就为空时才会失败,如果std::shared_ptr<void>没有指向T...
现在ptr虽然make_shared时是传入类型,但是不能直接取值,需要static_pointer_cast转为对应的格式,以f5()为例,a为指向TYPE的智能指针,也就是指向了A的对象指针,我们需要这样进行转换: auto c=static_pointer_cast<TYPE>(ptr); 1. 然后取值,输出。 cout<<(*c)->data; ...