1.shared_ptr<void> 和 std::any
#include <iostream>
#include <memory>
#include <any>
using namespace std;
class A {
public:
A(){
cout<<"A() is called..."<<endl;
}
~A(){}
void sayHello(){
cout<<"sayHello is called..."<<endl;
}
};
class B : public A
{
public:
B(){
cout<<"B() is called..."<<endl;
}
~B(){}
};
int main(int argc, char *argv[])
{
//1.shared_ptr<void> 和 std::any
{
shared_ptr<A> spA = std::make_shared<A>();
std::cout << "The reference count is: " << spA.use_count() << std::endl;
std::shared_ptr<void> sp = spA;
// 输出引用计数
std::cout << "The reference count is: " << spA.use_count() << std::endl;
std::cout << "The reference count is: " << sp.use_count() << std::endl;
// 创建另一个shared_ptr指向同一个对象
// std::shared_ptr<A> spA2 = std::dynamic_pointer_cast<A>(sp);//不能是 dynamic_pointer_cast
std::shared_ptr<A> spA2 = std::static_pointer_cast<A>(sp);
// 输出引用计数
std::cout << "The reference count is: " << spA.use_count() << std::endl;
std::cout << "The reference count is: " << sp.use_count() << std::endl;
std::cout << "The reference count is: " << spA2.use_count() << std::endl;
}
std::cout<<"---------------------------------------------------"<<std::endl;
{
shared_ptr<A> spA = std::make_shared<A>();
std::cout << "The reference count is: " << spA.use_count() << std::endl;
std::any sp = spA;
// 输出引用计数
std::cout << "sp.has_value(): " << sp.has_value() << std::endl;
std::cout << "The reference count is: " << spA.use_count() << std::endl;
// 创建另一个shared_ptr指向同一个对象
std::shared_ptr<A> spA2 = std::any_cast<shared_ptr<A>>(sp);
// 输出引用计数
std::cout << "The reference count is: " << spA.use_count() << std::endl;
// std::cout << "sp.has_value(): " << sp.has_value() << std::endl;
std::cout << "The reference count is: " << spA2.use_count() << std::endl;
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.