C++ - std::shared_ptr::get

public member function - 公开成员函数
Defined in header <memory> - 定义于头文件 <memory>

1. std::shared_ptr::get

element_type* get() const noexcept;

Get pointer.
获取指针。

Returns the stored pointer.
返回存储的指针。

The stored pointer points to the object the shared_ptr object dereferences to, which is generally the same as its owned pointer.
存储的指针指向 shared_ptr 对象解引用的对象,通常与其拥有的指针相同。

The stored pointer (i.e., the pointer returned by this function) may not be the owned pointer (i.e., the pointer deleted on object destruction) if the shared_ptr object is an alias (i.e., alias-constructed objects and their copies).
如果 shared_ptr 对象是别名 (i.e., alias-constructed objects and their copies),则 stored pointer (i.e., the pointer returned by this function) 可能不是 owned pointer (i.e., the pointer deleted on object destruction)。

A shared_ptr may share ownership of an object while storing a pointer to another object. get() returns the stored pointer, not the managed pointer.
shared_ptr 可以在存储指向另一个对象的指针时共享对象的所有权。get() 返回存储的指针,而非被管理指针。

2. Parameters

none

3. Return value

The stored pointer.
element_type is a member type, alias of shared_ptr's template parameter (T).

4. Examples

4.1 std::shared_ptr::get

//============================================================================
// Name        : std::shared_ptr::get
// Author      : Yongqiang Cheng
// Version     : Version 1.0.0
// Copyright   : Copyright (c) 2019 Yongqiang Cheng
// Description : Hello World in C++, Ansi-style
//============================================================================#include <iostream>
#include <memory>int main()
{int* p = new int(10);std::shared_ptr<int> strong(p);if (strong.get() == p)std::cout << "strong and p point to the same location\n";// four ways of accessing the same address:std::cout << *strong.get() << "\n";std::cout << *(strong.get()) << "\n";std::cout << *strong << "\n";std::cout << *p << "\n";return 0;
}
strong and p point to the same location
10
10
10
10
请按任意键继续. . .
assignment [ə'saɪnmənt]:n. 任务,布置,赋值

4.2 std::shared_ptr::get

//============================================================================
// Name        : std::shared_ptr::get
// Author      : Yongqiang Cheng
// Version     : Version 1.0.0
// Copyright   : Copyright (c) 2019 Yongqiang Cheng
// Description : Hello World in C++, Ansi-style
//============================================================================#include <iostream>
#include <memory>void output(std::string msg, int const* pint)
{std::cout << msg << *pint << "\n";
}int main()
{int* pint = new int(10);std::shared_ptr<int> pshared = std::make_shared<int>(9);output("Naked pointer: ", pint);// output("Shared pointer ", pshared); // 编译错误output("Shared pointer with get(): ", pshared.get());delete pint;return 0;
}
1>------ Build started: Project: yongqiangcheng, Configuration: Debug Win32 ------
1>  yongqiang.cpp
1>d:\visual_studio_workspace\yongqiangcheng\yongqiangcheng\yongqiang.cpp(14): error C2679: binary '<<': no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(495): note: could be 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_streambuf<char,std::char_traits<char>> *)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(475): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(const void *)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(455): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long double)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(435): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(double)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(415): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(float)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(395): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned __int64)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(375): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(__int64)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(355): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned long)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(335): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(long)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(315): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned int)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(290): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(int)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(270): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(unsigned short)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(236): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(short)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(216): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(bool)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(209): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(202): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ios<char,std::char_traits<char>> &(__cdecl *)(std::basic_ios<char,std::char_traits<char>> &))'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(196): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator <<(std::basic_ostream<char,std::char_traits<char>> &(__cdecl *)(std::basic_ostream<char,std::char_traits<char>> &))'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(692): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(739): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(777): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(824): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(950): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const signed char *)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(957): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,signed char)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(964): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const unsigned char *)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(971): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,unsigned char)'
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(981): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>,std::string>(std::basic_ostream<char,std::char_traits<char>> &&,const _Ty &)'
1>          with
1>          [
1>              _Ty=std::string
1>          ]
1>  d:\program files (x86)\microsoft visual studio 14.0\vc\include\ostream(1019): note: or       'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const std::error_code &)'
1>  d:\visual_studio_workspace\yongqiangcheng\yongqiangcheng\yongqiang.cpp(14): note: while trying to match the argument list '(std::ostream, std::string)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

添加头文件 #include <string>

//============================================================================
// Name        : std::shared_ptr::get
// Author      : Yongqiang Cheng
// Version     : Version 1.0.0
// Copyright   : Copyright (c) 2019 Yongqiang Cheng
// Description : Hello World in C++, Ansi-style
//============================================================================#include <iostream>
#include <memory>
#include <string>void output(std::string msg, int const* pint)
{std::cout << msg << *pint << "\n";
}int main()
{int* pint = new int(10);std::shared_ptr<int> pshared = std::make_shared<int>(9);output("Naked pointer: ", pint);// output("Shared pointer ", pshared); // 编译错误output("Shared pointer with get(): ", pshared.get());delete pint;return 0;
}
Naked pointer: 10
Shared pointer with get(): 9
请按任意键继续. . .

4.3 stored pointer - owned pointer

cannot convert std::shared_ptr<int> to const int*.

/*
============================================================================
Name        : yongqiang.cpp
Author      : Yongqiang Cheng
Version     : Version 1.0.0
Copyright   : Copyright (c) 2020 Yongqiang Cheng
Description : Hello World in C++, Ansi-style
============================================================================
*/#include <iostream>
#include <memory>
#include <string>
#include <typeinfo>void output(std::string msg, const int *pint) {std::cout << msg << *pint << "\n";
}int main() {int *pint = new int(10);std::shared_ptr<int> pshared = std::make_shared<int>(9);std::cout << "data type: " << typeid(pint).name() << std::endl;std::cout << "data type (owned pointer): " << typeid(pshared).name() << std::endl;std::cout << "data type (stored pointer): " << typeid(pshared.get()).name() << std::endl;std::cout << "data: " << *pint << "\n";std::cout << "data (owned pointer): " << *pshared << "\n";std::cout << "data (stored pointer): " << *(pshared.get()) << "\n";output("Naked pointer: ", pint);output("Shared pointer ", pshared);output("Shared pointer with get(): ", pshared.get());delete pint;return 0;
}
====================[ Build | yongqiang | Debug ]===============================
/home/yongqiang/software/clion-2019.1.4/bin/cmake/linux/bin/cmake --build /home/yongqiang/CLionProjects/yongqiang/cmake-build-debug --target yongqiang -- -j 6
Scanning dependencies of target yongqiang
[ 50%] Building CXX object CMakeFiles/yongqiang.dir/main.cpp.o
/home/yongqiang/CLionProjects/yongqiang/main.cpp: In function ‘int main()’:
/home/yongqiang/CLionProjects/yongqiang/main.cpp:32:38: error: cannot convert ‘std::shared_ptr<int>’ to ‘const int*’ for argument ‘2’ to ‘void output(std::__cxx11::string, const int*)’output("Shared pointer ", pshared);^
CMakeFiles/yongqiang.dir/build.make:62: recipe for target 'CMakeFiles/yongqiang.dir/main.cpp.o' failed
make[3]: *** [CMakeFiles/yongqiang.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/yongqiang.dir/all' failed
make[2]: *** [CMakeFiles/yongqiang.dir/all] Error 2
CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/yongqiang.dir/rule' failed
make[1]: *** [CMakeFiles/yongqiang.dir/rule] Error 2
Makefile:118: recipe for target 'yongqiang' failed
make: *** [yongqiang] Error 2
/*
============================================================================
Name        : yongqiang.cpp
Author      : Yongqiang Cheng
Version     : Version 1.0.0
Copyright   : Copyright (c) 2020 Yongqiang Cheng
Description : Hello World in C++, Ansi-style
============================================================================
*/#include <iostream>
#include <memory>
#include <string>
#include <typeinfo>void output(std::string msg, const int *pint) {std::cout << msg << *pint << "\n";
}int main() {int *pint = new int(10);std::shared_ptr<int> pshared = std::make_shared<int>(9);std::cout << "data type: " << typeid(pint).name() << std::endl;std::cout << "data type (owned pointer): " << typeid(pshared).name() << std::endl;std::cout << "data type (stored pointer): " << typeid(pshared.get()).name() << std::endl;std::cout << "data: " << *pint << "\n";std::cout << "data (owned pointer): " << *pshared << "\n";std::cout << "data (stored pointer): " << *(pshared.get()) << "\n";output("Naked pointer: ", pint);
//    output("Shared pointer ", pshared);output("Shared pointer with get(): ", pshared.get());delete pint;return 0;
}

Linux

/home/yongqiang/CLionProjects/yongqiang/cmake-build-debug/yongqiang
data type: Pi
data type (owned pointer): St10shared_ptrIiE
data type (stored pointer): Pi
data: 10
data (owned pointer): 9
data (stored pointer): 9
Naked pointer: 10
Shared pointer with get(): 9Process finished with exit code 0

Windows

data type: int *
data type (owned pointer): class std::shared_ptr<int>
data type (stored pointer): int *
data: 10
data (owned pointer): 9
data (stored pointer): 9
Naked pointer: 10
Shared pointer with get(): 9
请按任意键继续. . .

References

http://www.cplusplus.com/reference/memory/shared_ptr/get/
https://en.cppreference.com/w/cpp/memory/shared_ptr/get

C++ - std::shared_ptr::get相关推荐

  1. C++ 智能指针std::shared_ptr简单使用和理解

    参考:https://blog.csdn.net/u011068702/article/details/83692838 1  智能指针std::shared_ptr相关知识和如何使用 我们这里先说下 ...

  2. 【c++】4.std::shared_ptr、std::make_shared、 .get() 、.data()、void *p 的用法、裸指针

    std::shared_ptr.std::make_shared. .get() ..data().void *p 的用法.裸指针 (1)shared_ptr能够记录对象被引用的次数,主要被用来管理动 ...

  3. (译+原)std::shared_ptr及std::unique_ptr使用数组

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5462363.html 参考网址: http://stackoverflow.com/questions ...

  4. 使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp

    使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp 实现功能 C++实现代码 实现功能 使用 std::shared_ptr ...

  5. C++之智能指针std::shared_ptr简单使用和理解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程 1  智能指针std::shared_ptr相关知识和如何使用 我们这里先说下智能指针std::sha ...

  6. C++11 std::shared_ptr的std::move()移动语义底层分析

    std::shared_ptr的std::move()移动语义底层分析 执行std::move()之前: 执行std::move()之后: 结论:一个浅拷贝 sizeof(std::shared_pt ...

  7. std::shared_ptr之deleter的巧妙应用

    本文由作者邹启文授权网易云社区发布. std::shared_ptr 一次创建,多处共享,通过引用计数控制生命周期.  实例  在邮箱大师PC版中,我们在实现搜索时,大致思路是这样的:  每一个账号都 ...

  8. std::make_shared<T>/std::make_unique<T>与std::shared_ptr<T>/std::unique_ptr<T>的区别与联系

    (1).std::make_shared<T>与std::make_unique<T>相对于std::shared_ptr<T>/std::unique_ptr&l ...

  9. 线程和std::shared_ptr智能指针使用

    //定义线程指针 std::unique_ptr<std::thread> thread_; //指向定义函数 threadCapture_.reset(new std::thread([ ...

  10. std::shared_ptr 详解

    一.介绍 shared_ptr是一种智能指针(smart pointer),作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象.这便是所谓的引用计数(reference count ...

最新文章

  1. SQL Server中使用正则表达式
  2. 2020年春季学习信号与系统课程作业参考答案-第十一次作业
  3. SAP保存操作记录CDHDR和CDPOS表
  4. 树莓派入门(树莓派登录的几种方式)
  5. 远控免杀专题9 --- Avet免杀
  6. python常规异常的基类_Python警告的基类警告类是____。
  7. ASP.NET页面间数据传递的方法
  8. Web前端基础---认识HTML及其组成---标签、框架
  9. Python3.x爬虫教程:爬网页、爬图片、自己主动登录
  10. ensprip引入静态路由_IP路由基础理论知识详解(三)
  11. MYSQL 解压版5.7.12安装和客户端连接。
  12. 淘宝类目批量查询工具使用教程
  13. Tp5.0完全开发手册学习(第六章 请求)之一 (request 和input)
  14. ES 关于text和keyword两种类型数据搜索区别
  15. 手把手教你搭建Windows环境微信小程序的本地测试服务器
  16. Unity3D ParticleSystem粒子系统
  17. 解决docker-compose up -d 出现Client.Timeout exceeded while awaiting headers的问题(配置docker国内镜像源)
  18. Delphi FMX正确设计和加载图片满足分布式跨平台App的性能需求-分布式跨平台App中美工图片的处理、上传下载、并发及客户端显示技术架构
  19. Axhub Charts的图表 点击后 无法进行中继器的数据编辑(axure 9)问题解决
  20. 本本安装ATI 催化剂驱动5.8

热门文章

  1. CAN总线控制器SJA1000的使用
  2. RobotFramework-自定义远程java关键字库能否返回Map类型
  3. Ubuntu22安装一些R包遇到的困难与解决方法(一)--igraph篇
  4. hihocoder 1054
  5. 杰理之IIS总线【篇】
  6. jupyter的环境问题:在jupyter中添加我们想要的环境
  7. 淘宝皇冠卖家过劳死 大家一定要劳逸结合啊,别太拼命啦
  8. 16G的U盘只显示有146M的原因和何解决办法
  9. 郭炜:就算倒在离开源成功最近的五米,也要让下一代开源人坚定前行
  10. 学习HTML的第一天