一、获取原始指针 #include"stdafx.h"#include<iostream>#include<windows.h>#include<memory>usingnamespacestd;int_tmain(intargc, _TCHAR*argv[]) {intlen =128; shared_ptr<char> ptr(newchar[len]);//得到指针的原始地址char* addr = ptr.get(); memset(addr,0, len); strcpy_s(addr, len,"fas...
std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: auto pointer = std::make_shared<int>(10); auto pointer2 = pointer; // 引用计数+1 auto pointer3 = pointer; // 引用计数+1 int *p = pointer.get();...
1.一个原始指针初始化多个shared_ptr,会造成二次释放同一内存空间。 int*ptr =newint;shared_ptr<int>p1(ptr);shared_ptr<int>p2(ptr);// 错误 因为p1,p2两个指针之间无关联关系,(每个指针的强引用计数都是1),所以在释放ptr所指向的内存时,p1和p2都会释放这个内存空间,显然有问题(一个内存空间被释放了两...
从shared_ptr获得正常的ptr的方法是使用get()成员函数。这个函数返回一个指向共享对象的原始指针,即ptr。 示例代码: 代码语言:c++ 复制 #include<iostream> #include<memory> int main() { std::shared_ptr<int> shared_ptr = std::make_shared<int>(42); int* ptr = shared_ptr.get(); std::cout <...
get()函数,表示返回当前存储的指针(就是被shared_ptr所管理的指针) 。 但是不建议使用get()函数获取 shared_ptr 关联的原始指针,因为如果在 shared_ptr 析构之前手动调用了delete函数,会导致错误 shared_ptr<T> ptr(new T()); T *p = ptr.get(); // 获得传统 C 指针 ...
std::shared_ptr<> 转指针 std::shared_ptr<> 是C++标准库中的一个智能指针,用于自动管理具有引用计数的动态分配的对象。它确保当没有任何 std::shared_ptr 指向对象时,对象会被自动删除。从 std::shared_ptr<> 获取原始指针(即裸指针)是一个常见操作,但需要注意避免悬空指针等问题。
如果智能指针被初始化了一块有效内存,那么这块内存的引用计数 + 1,如果智能指针没有被初始化或者被初始化为 nullptr 空指针,引用计数不会 + 1。另外,不要使用一个原始指针初始化多个 shared_ptr。 (2)通过拷贝和移动构造函数初始化 #include"stdafx.h"#include<iostream>#include<windows.h>#include<memory>usin...
1 shared_ptr指针初始化 1.1 通过一个已存在的普通指针进行初始化 此种方法不建议,因为如果原始指针指向的空间被释放掉的话,同时会引起指针指针的异常 1.2 通过...
使用get方法可以取出智能指针中的原始指针: 但取出的原始指针,可能被释放,因此使用这个指针是不安全的,如在不同线程中,应该对该指针做加锁保护,或者以weak_ptr取代原始...
std::shared_ptr:共享的智能指针 std::unique_ptr:独占的智能指针 std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,是用来监视 shared_ptr 的。 共享智能指针(shared_ptr)是指多个智能指针可以同时管理同一块有效的内存,共享智能指针 shared_ptr 是一个模板类,如果要进行初始化有三种方式:通过构造函...