{intlen =128; shared_ptr<char> ptr(newchar[len]);//得到指针的原始地址char* addr = ptr.get(); memset(addr,0, len); strcpy_s(addr, len,"fasfwefew"); cout<<"string :"<< addr <<endl; shared_ptr<int> ptr1(newint);*ptr1 =100; cout<< *ptr1.get() <<""<< *ptr1 <<end...
方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
std::shared_ptr<int> p7(new int[10], deleteInt); 四shared_ptr常用函数 get()函数,表示返回当前存储的指针(就是被shared_ptr所管理的指针) 。 但是不建议使用get()函数获取 shared_ptr 关联的原始指针,因为如果在 shared_ptr 析构之前手动调用了delete函数,会导致错误 shared_ptr<T> ptr(new T()); ...
从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 <...
如果智能指针被初始化了一块有效内存,那么这块内存的引用计数 + 1,如果智能指针没有被初始化或者被初始化为 nullptr 空指针,引用计数不会 + 1。另外,不要使用一个原始指针初始化多个 shared_ptr。 (2)通过拷贝和移动构造函数初始化 #include"stdafx.h"#include<iostream>#include<windows.h>#include<memory>usin...
(1)如果从std::shared_ptr获取原始指针(通过.get()方法),然后继续使用这个原始指针,即使所有std::shared_ptr都已释放资源,原始指针仍然存在,但它指向的对象已经被销毁。原始指针就变成了悬空指针。 std::shared_ptr<int> sp(new int(42)); int* rawPtr = sp.get(); // 获取原始指针 ...
T &operator*()const;// 操作符重载T &operator->()const;// 操作符重载T *get()const;// 获得原始指针boolunique()const;// 是否唯一longuse_count()const;// 引用计数explicitoperatorbool()const;// 显式bool型转换voidswap(shared_ptr & b);// 交换指针}; ...
1 shared_ptr指针初始化 1.1 通过一个已存在的普通指针进行初始化 此种方法不建议,因为如果原始指针指向的空间被释放掉的话,同时会引起指针指针的异常 1.2 通过...
使用get方法可以取出智能指针中的原始指针: 但取出的原始指针,可能被释放,因此使用这个指针是不安全的,如在不同线程中,应该对该指针做加锁保护,或者以weak_ptr取代原始...