相互转化见示例 1structtest2{3intnum;4stringname;5};67test* pTest =newtest();8std::shared_ptr<test> ptr_test = std::shared_ptr<test>(pTest);//普通指针转shared_ptr910std::shared_ptr<test> ptr_test2 = std::make_shared<test>();11test* pTest2 = ptr_test2.get();//shared_ptr转...
在初始化 shared_ptr 智能指针时,还可以自定义所指堆内存的释放规则,这样当堆内存的引用计数为 0 时,会优先调用我们自定义的释放规则。 在某些场景中,自定义释放规则是很有必要的。比如,对于申请的动态数组来说,shared_ptr 指针默认的释放规则是不支持释放数组的,只能自定义对应的释放规则,才能正确地释放申请的堆...
shared_ptr<int> pi = new int (1024); // 错误:必须使用直接初始化形式 shared_ptr<int> p2(new int(1024)); // 正确:使用了直接初始化形式 出于相同的原因,一个返回 shared_ptr 的函数不能在其返回语句中隐式转换一个普通指针:shared_ptr<int> clone(int p) { return new int(p); // 错误:...
vector<polygon_ptr>polygon_ptrs;polygon_ptrs.push_back(make_shared<Rect>(r_points,r_width,r_height));polygon_ptrs.push_back(make_shared<Circle>(c_points,c_radius));//auto rect = dynamic_cast<Rect*>(polygon_ptrs.front()); // compile error//auto rect = dynamic_cast<rect_ptr>(polygon...
shared_ptr类的默认初始化: 如果不初始化一个shared_ptr类对象,那么该对象默认初始化为一个空指针 三、make_shared函数 最安全的分配和使用动态内存的方法就是调用该函数 此函数在内存中动态分配对象并初始化,返回此对象的shared_ptr //指向一个值为42的int的shared_ptr ...
在c++ 98 里面只有一种智能指针,就是 std::auto_ptr,因为具有唯一所有权的特征,所以限制了它的使用范围,比如你无法在容器中使用它。而我们知道 stl 容器是值语义的,如果不能用智能指针管理的话,只有两种办法来使用。 一种是类似这样: std::vector<std::string> names; ...
1 shared_ptr指针初始化 1.1 通过一个已存在的普通指针进行初始化 此种方法不建议,因为如果原始指针指向的空间被释放掉的话,同时会引起指针指针的异常 1.2 通过...
使用get方法可以取出智能指针中的原始指针: 但取出的原始指针,可能被释放,因此使用这个指针是不安全的,如在不同线程中,应该对该指针做加锁保护,或者以weak_ptr取代原始...
shared_ptr的产生与unique_ptr类似,都是为了解决raw pointer的new和delete的成对使用,导致的野指针、内存泄漏、重复释放内存等。 不过shared_ptr与unique_ptr场景又有所不同,这里主要是一个raw pointer在不同的代码块之间传来传去的场景,或者指针指向的内存比较大,这段内存可以切分成很多小部分,但是他们却需要共享彼...
std::shared_ptr<int> p = std::shared_ptr<int>(new int);这样你就声明了一个智能指针p,并且为其内部的真实指针分配了内存空间。使用时p可以像一般指针那样用 比如 p = 5;即给其赋值5。还有就是虽然你一开始new了,但是你不需要delete,只能指针会在其被系统销毁时,检查是否需要delete。你...