std::const_pointer_cast<T>: 用于在const和非const类型之间进行转换。 std::reinterpret_pointer_cast<T>: 任意类型之间的转换,但不检查类型兼容性。 4. 编写示例代码 由于std::shared_ptr<void>不持有类型信息,因此我们不能直接使用std::dynamic_pointer_cast进行转换。以下示例展示了如何...
方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
int main() { std::cout << "At begin of main.\ncreating std::vector<std::shared_ptr<void>>" << std::endl; std::vector<std::shared_ptr<void>> v; { std::cout << "Creating test" << std::endl; v.push_back( std::shared_ptr<test>( new test() ) ); std::cout << "Leav...
使用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; }; ... some_day.user_data = st...
tolua_pushusertype(tolua_S,(void*)tolua_ret,"Test::Tst_ShareTest"); } 也就是说,转换后的代码会生成一个self对象,用这个对象调用get(),因此我们可以在lua代码中这样调用 oj =Test.createObject()localojsh = tolua.cast(oj,"std::shared_ptr<Test::Tst_ShareTest>") ...
一、shared_ptr认知及陷阱 shared_ptr的类型转换不能使用一般的static_cast,这种方式进行的转换会导致转换后的指针无法再被shared_ptr对象正确的管理。应该使用专门用于shared_ptr类型转换的 static_pointer_cast<T>() , const_pointer_cast<T>() 和dynamic_pointer_cast<T>()。
在这个例子中,我们创建了一个std::shared_ptr<Derived>对象,然后使用std::static_pointer_cast将其向上转换为std::shared_ptr<Base>。为了确保转换成功,我们使用std::dynamic_pointer_cast尝试将std::shared_ptr<Base>转换回std::shared_ptr<Derived>。如果转换成功,我们将打印出"Conversi...
std::function< void (void*) > deleter;T * p;template <typename U> my_unique_ptr( U * p,...
push_back(_p); return _p; } void destoryAll() { m_list.clear(); } private: std::vector<spProduct> m_list; }; 代码如上所示. 很简单, 我们使用一个vector对所有工厂生成的产品进行记录. 注意, 在vector中, 我们使用shared_ptr, 这样可以保证产品的拥有者是工厂. 而返回给用户的, 则是weak_...
shared_ptr<void> vptr = shared_ptr<Foo>(newFoo);return0; } 输出: Foo()~Foo() 与第一段代码中类似,不过把void*换成了std::shared_ptr<void>,那么shared_ptr<void>为什么能够调用到正确的析构函数呢?一定是shared_ptr里面搞了什么鬼。 std::shared_ptr<void>为啥能正常工作 ...