这行代码尝试将 basePtr 转换为 std::shared_ptr<Derived>。dynamic_pointer_cast 会在运行时检查转换是否安全(即 basePtr 是否确实指向一个 Derived 类对象)。如果转换成功,derivedPtr 将被赋予新的类型,并指向原来的对象;如果转换失败,derivedPtr 将为nullptr。 检查转换结果并调用方法: cpp if (derived...
oj =Test.createObject()localojsh = tolua.cast(oj,"std::shared_ptr<Test::Tst_ShareTest>") ojp=ojsh:get() ojp:func() 2. 思路二,不想让lua和pkg文件跟std::shared_ptr有太多关联,可以试试用typedef重新定义std::shared_ptr类型。 typedef std::shared_ptr<Tst_ShareTest> ShareTestPtr; 在pkg文...
不能直接转,只能将其移动到另一个用std::unique_ptr管理的对象里。 #include<iostream>#include<memory>intmain(){ std::shared_ptr<std::string> a = std::make_shared<std::string>(std::string("test")); std::cout << *a << std::endl; std::unique_ptr<std::string> b = std::make_uni...
应该使用专门用于shared_ptr类型转换的 static_pointer_cast<T>() , const_pointer_cast<T>() 和dynamic_pointer_cast<T>()。 使用shared_ptr避免了手动使用delete来释放由new申请的资源,标准库也引入了make_shared函数来创建一个shared_ptr对象,使用shared_ptr和make_shared,你的代码里就可以使new和delete消失,...
方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用
注意, 在vector中, 我们使用shared_ptr, 这样可以保证产品的拥有者是工厂. 而返回给用户的, 则是weak_ptr, 表示用户对于产品, 没有拥有权, 只有使用权. 而且我们并不需要手动的将shared_ptr给转换为weak_ptr, 这个过程是自动的. (黑心工厂啊...) 而当我们需要销毁我们已经生产出来的产品怎么办呢? 很简单...
shared_ptr可以在运行时改变删除器,unique_ptr不可以。std::shared_ptr<int> p(new int, [](int * t) { delete t; }); p.reset(new int, [](int * t) { std::cout << "shared_ptr可以在运行时改变删除器" << std::endl; delete t; }); ...
int* raw_ptr = new int(10); std::unique_ptr<int> uptr(raw_ptr); // 如果uptr已有对象,先释放旧对象,再转移所有权 uptr.reset(raw_ptr); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 2. std::shared_ptr (C++11)
引用计数指的是,所有管理同一个裸指针(raw pointer)的shared_ptr,都共享一个引用计数器,每当一个...
1 struct test 2 { 3 int num; 4 string name; 5 }; 6 7 test* pTest = new test(); 8 std::shared_ptr<test> ptr_test = std::shared_ptr<test>(pTest); //普通指针转shared_ptr 9 10 std::shared_ptr<test> ptr_test2 = std::make_shared<test>(); 11 test* pTest2 = ptr_test...