是一种在C++中管理动态内存的方法。std::unique_ptr是C++11引入的智能指针,用于自动管理动态分配的对象,避免内存泄漏和资源泄漏。 创建对象数组的步骤如下: 1. 包含头文件:首先...
原因:auto_ptr和shared_ptr的默认释放内存方式是delete,如果动态对象是以new[]形式创建的,比如数组, 就不要使用auto_ptr和shared_ptr,否则就会导致以delete形式去释放new[]申请的内存 一句话概括就是auto_ptr和shared_ptr只能指向new(除非为智能指针定义一个删除器) ② unique_ptr可以指向new和new[]申请的动态内存...
std::cout << "move before fPtr1 address:" << fPtr1.get() << " fPtr3 address:" << fPtr3.get() << std::endl; fPtr1 = std::move(fPtr3); std::cout << "move after fPtr1 address:" << fPtr1.get() << " fPtr3 address:" << fPtr3.get() << std::endl; std::c...
创建shared_ptr的实例和unique_ptr类似,示例代码如下。 class A{ }; std::shared_ptr<A> insA(new A));//在堆上创建一个类的实例 std::shared_ptr<A> insB = std::make_shared<A>(); //调用make_shared来new一个对象实例 std::shared_ptr<A> insC = insB; //shared_ptr允许直接赋值 另外,shar...
创建数组指针的unique_ptr代码如下: 代码语言:javascript 复制 #include <type_traits> #include <memory> // 初始化版本 template<typename T,bool ZERO=true>inline typename enable_if<ZERO,unique_ptr<T>>::type make_unique_array(size_t size){ // T必须是动态数组类型,且不能是定长数组 static_assert...
推荐使用 std::make_unique 创建std::unique_ptr,它简化了代码并避免了潜在的异常安全问题。 #include <memory> #include <iostream> void example() { // 使用 std::make_unique 创建 unique_ptr auto ptr = std::make_unique<int>(40); std::cout << *ptr << std::endl; // 输出: 40 } 总结...
《现代C++编程入门》第33集:智能指针智能唯一指针unique_ptr的声明初始化及简单使用。——《刚哥伴读会》对现代C++编程感兴趣的朋友,欢迎加入我的伴读会。 科技 计算机技术 编程入门 C++ 编程 现代C++ 刚哥伴读会 间接访问运算符 指针 C/C++ 智能指针 unique_ptr...
一、unique_ptr类 头文件:#include<memory> 智能指针,是一个模板。创建智能指针时,必须提供指针所指的类型 与shared_ptr的不同之处: shared_ptr所指向的对象可以有多个其他shared_ptr智能指针 而unique_ptr所指向的对象只能有一个unique_ptr指针,也就是自己。当unique_ptr被销毁时,它所指向的对象也被销毁 ...
unique_ptr创建 cat.h #ifndefCAT_H#defineCAT_H#include<string>#include<iostream>usingnamespacestd;classCat{public:Cat(string name);Cat()=default;~Cat();voidcat_info()const{cout<<"cat ino name:"<<name<<endl;}stringget_name()const{returnname;}voidset_name(conststring&name){this->name=...
//1 创建 int main() { // 创建一个 shared_ptr 并指向新建的 MyClass 对象 std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>(42); // 访问对象的方法 std::cout << "Value: " << ptr1->GetValue() << std::endl;