- 浏览: 769101 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
#include <memory> #include <string> #include <iostream> using namespace std; int main() { shared_ptr<string> p = make_shared<string>("a"); cout << "p use_count:" << p.use_count() << endl; string *p1 = p.get(); cout << "*p:" << *p << ",*p1:" << *p1 << endl; cout << "p use_count:" << p.use_count() << endl; auto p2 = p; cout << "p use_count:" << p.use_count() << endl; shared_ptr<string> p3(p); cout << "p use_count:" << p.use_count() << endl; shared_ptr<string> p4 = make_shared<string>("b"); p3 = p4; cout << "p use_count:" << p.use_count() << endl; p2.~shared_ptr();//... cout << "p use_count:" << p.use_count() << endl; if(p.unique()){ cout << "p is unique"; } } p use_count:1 *p:a,*p1:a p use_count:1 p use_count:2 p use_count:3 p use_count:2 p use_count:1 p is unique
发表评论
-
条件变量
2018-12-03 13:43 454#include <iostream> #i ... -
std::function
2018-08-12 19:23 510#include <iostream> #i ... -
emplace_back
2018-08-02 07:40 552https://blog.csdn.net/xiaolewen ... -
输出类名
2014-02-20 21:51 591#include <iostream> us ... -
c++11应该使用的特性
2013-07-27 11:09 755http://blog.jobbole.com/44015/ -
random(new)
2013-07-21 12:00 808#include<iostream> #in ... -
tuple(new)
2013-07-15 22:11 603#include <tuple> #incl ... -
qtcreator c++11
2013-07-15 22:10 1387在.pro里面:QMAKE_CXXFLAGS += -std= ... -
weak_ptr
2013-04-20 16:07 779unique_ptr(定义在中)提供了一种严格的语义上的所有权 ... -
c++ lambda
2013-03-24 11:26 983#include <iostream> #i ... -
定长容器
2013-03-02 12:17 784#include<iostream> #in ... -
数组(new)
2012-10-30 22:00 649#include <iostream> us ... -
vector(new)
2012-10-21 15:05 811#include<iostream> #in ... -
auto(new)
2012-10-20 14:28 638#include<iostream> #in ... -
const
2012-10-08 23:57 1160#include<iostream> usi ... -
变量命名
2012-10-05 09:33 733#include<iostream> usi ... -
声明与定义
2012-10-04 11:33 698extern int i;//声明但未定义 int j;//声 ... -
初始化(new)
2012-10-04 11:16 1228#include<iostream> usi ... -
数字类型
2012-10-02 11:46 634我怕我翻译的不够专业,有些地方就用原文了,反正我是看懂了! 我 ... -
gcc4.7.2安装
2012-09-24 17:44 11250gcc4.7.2编译方法: 推荐第一种 1.简化版: htt ...
相关推荐
1. 直接构造:`std::shared_ptr<T> ptr(new T(args))`,这将创建一个新的`T`类型对象,并使用`new`运算符分配内存。 2. 通过`make_shared`函数:`std::shared_ptr<T> ptr = std::make_shared(args)`,这是更高效的...
### shared_ptr只能对new的内存操作 在C++标准库中,`std::shared_ptr`(在早期版本中可能使用`boost::shared_ptr`)是一种智能指针,它通过引用计数来管理动态分配的对象生命周期。`std::shared_ptr`的设计目的是...
本文主要讨论了三种智能指针:`shared_ptr`、`unique_ptr`和`weak_ptr`。 首先,`shared_ptr`是引用计数型智能指针,它维护了一个内部的引用计数,用于跟踪有多少个`shared_ptr`实例指向同一对象。当创建一个新的`...
std::shared_ptr<Test> p(new Test); 四、std::shared_ptr的大小 std::shared_ptr的大小是原始指针的两倍,因为它的内部有一个原始指针指向资源,同时有个指针指向引用计数。 五、std::shared_ptr的拷贝 std::...
1. 创建:你可以通过`new`操作符创建对象并直接传递给`std::shared_ptr`,或者使用`std::make_shared`,后者通常更高效,因为它可以一次性分配对象和控制块的内存。 ```cpp std::shared_ptr<int> ptr(new int(5)); ...
C++智能指针shared_ptr分析 概要: shared_ptr是c++智能指针中适用场景多,功能实现较多的智能指针。它采取引用计数的方法来实现释放指针所指向的资源。下面是我代码实现的基本功能。 实例代码: template class ...
在不使用make_shared的情况下,也可以直接使用new操作符来创建对象,并将原始指针传递给shared_ptr的构造函数: ```cpp shared_ptr<int> sp(new int(42)); ``` 但这种方式需要确保new操作符返回的指针被正确的初始...
例如,当你使用new创建一个对象时,可以立即将其赋值给一个std::unique_ptr或std::shared_ptr,这样就不必担心忘记调用delete。智能指针在作用域结束时会自动调用delete,消除了内存泄漏的风险。 在`src`目录下,...
与直接使用`new`和`shared_ptr`相比,`make_shared`通常更高效,因为它只需要一次内存分配,同时处理对象和引用计数。 使用`make_shared`的例子如下: ```cpp std::shared_ptr<int> p1 = std::make_shared(66); ...
在这个例子中,`ptr`是一个指向`int`类型的`shared_ptr`,并且已经用`new`关键字动态分配了一个值为5的`int`对象。 `shared_ptr`支持多种操作,包括访问所指对象、拷贝和赋值。拷贝构造或赋值操作不会导致原始对象...
例如,可以通过`std::shared_ptr(new T(args))`或`std::make_shared(args)`创建并初始化对象。reset方法则可以用来改变shared_ptr所指向的对象,或者释放当前对象并置空。 在某些情况下,可能需要自定义删除器,这...
使用`make_shared`比直接使用`new`和`shared_ptr`构造函数更高效,因为它可以优化内存分配。 **6. 自定义删除器** `shared_ptr`的构造函数允许指定一个自定义的删除器,用于在对象析构时执行特定的操作,而不是默认...
这样做的好处包括性能优化(因为`make_shared`能够一次性完成内存分配和对象构造,而不是分两步进行)和避免了潜在的二义性问题(如果直接使用new操作符,可能会出现两个`shared_ptr`拥有同一对象但各自维护不同引用...
5. **不支持`make_unique`**:与`shared_ptr`不同,C++11标准并未提供`make_unique`函数,因此无法像初始化`shared_ptr`那样便捷地创建`unique_ptr`。 `unique_ptr`的这些特性使其成为管理动态内存的理想选择,尤其...
尽管在C++11及以后版本中引入了更强大的智能指针如`unique_ptr`和`shared_ptr`,但了解`auto_ptr`的基本概念和用法对于理解智能指针仍然非常重要。 #### `auto_ptr`的概念与作用 `auto_ptr`主要用来管理动态分配的...
shared_ptr<int> sp(new int(5)); weak_ptr<int> wp(sp); ``` 在这个例子中,`wp`被初始化为指向`sp`所管理的对象,但`sp`的引用计数并未增加。 3.2 检查`weak_ptr`的有效性 由于`weak_ptr`不控制对象的生命周期...