shared_ptr & shared_array 最像指针, smart_ptr库中最有价值、最重要的组成部分,也是最有用的。 包装了new操作在堆上分配的动态对象 ,实现的是引用计数型的指针。 可以安全的放到标准容器中。 重载了* 和 -> 用get()得到原始指针 reset将引用数减1,至0时删除 支持比较运算符,基于内部指针 基于虚函数的多...
2.在以下情况下,会引起Shared_ptr的引用计数加一 - [ ]当发生赋值拷等贝动作时会引起use_count+1 #include<iostream>usingnamespacestd;classEntry;Entry*e;classEntry{public:explicitEntry(){Array=newint{300};}~Entry(){std::cout<<"Entry的析构函数"<<std::endl;deleteArray;Array=nullptr;}intdata=10...
另一个shared_ptr不能做的事情是管理数组,不能吃std::shared_ptr<T[]>这样的类型,然而,c++ 11之后标准库已经引入了std::array,shared_ptr管理一个std::array类型的对象是可行的。 shared_ptr的注意点 shared_ptr可以用来管理具有“共享所有权”语义的动态资源,可以自动管理对象的生命周期和GC 由于control_block...
// ... template <typename T> shared_ptr<T> arrayShared_ptr(size_t size) { // 返回匿名对象 return shared_ptr<T>(new T[size], default_delete<T[]>()); } int main() { shared_ptr<int> sPtr1 = arrayShared_ptr<int>(100); shared_ptr<int> sPtr2 = arrayShared_ptr<char>(200);...
#include <iostream> #include <memory> void example() { // 使用 std::shared_ptr 管理动态分配的数组 std::shared_ptr<int[]> ptr(new int[3]{1, 2, 3}); std::cout << "Array: "; for (int i = 0; i < 3; ++i) { std::cout << ptr[i] << " "; } std::cout << std::...
If I have aboost::shared_array<T>(or aboost::shared_ptr<T[]>), is there a way to obtain aboost::shared_ptr<T>which shares with the array? So for example, I might want to write: shared_array<int>array(newint[10]); shared_ptr<int> element = &array[2]; ...
1、shared_ptr<T> p(new Y); 要了解更多关于auto_ptr的信息,可以查看more effective c++ 的p158页条款28 要了解shared_ptr 类模板信息,可以查看boost 1.37.0中文文档,而且支持数组的shared_array 类模板
这里的is_array<_Ty>{}生成了一个临时对象,大家在源代码里跳过去能看到这里是做了一个函数选择,利用函数重载的功能,根据_Ty是否是一个数组类型将其分发给对应的重载函数。这种技巧在stl库中应用的很多,具体名字被我给忘了。。。这里不多解释,接着看。
Had we neglected to supply a deleter, this code would be undefined. 百度翻译: 如果我们忽略了提供一个deleter,这个代码将是未定义的。 所以,在使用shared_ptr的时候要注意避坑,否则就引入了一个undefined behavior,还可能偷偷泄漏了内存。方便记忆:shared_ptr+array+deleter。
同族但有不同的功能目标的还有如下5个: scoped_ptr scoped_array shared_ptr shared_array weak_ptr scoped_ptr和scoped_array与标准C++中的智能指针auto_ptr功能基本类似,过它不传递所有权,不可复制。从其名称就可以看出,其主要目标就是在小范围,小作用域中使用,以减少显式的delete, new配对操作,提高代码的安全...