智能指针是一个组合类,旨在管理动态分配的内存并确保在智能指针对象超出范围时删除内存。智能指针只是包装原始指针并重载->and*运算符的类;这允许它们提供与原始指针相同的语法。智能指针在<memory>头文件的std命名空间中定义。它们对于RAII(对象生命周期和资源管理)或资源获取即初始化编程习惯至关重要。这个习惯用法的...
1.智能指针 C++中四种常见的指针:unique_ptr,shared_ptr,weak_ptr,以及C++中已经废弃的auto_ptr。 下面我们根据对象所有权以及对象生命周期分别对这4类进行讲解: 1.auto_ptr auto_ptr要求同时只能有一个指针指向同一个对象,如果有另外一个指针引用了对象,则当前指针引用会被强制抹除置为null_ptr。 模型如下: 案...
此类表示智能指针对象。 重要 无法在 Windows 运行时中执行的应用程序中使用此类及其成员。 语法 C++复制 template<typenameT>classCAutoPtr 参数 T 指针类型。 成员 公共构造函数 名称描述 CAutoPtr::CAutoPtr构造函数。 CAutoPtr::~CAutoPtr析构函数。
此类使用向量 new 和 delete 运算符表示智能指针对象。重要 无法在 Windows 运行时中执行的应用程序中使用此类及其成员。语法复制 template<typename T> class CAutoVectorPtr 参数T 指针类型。成员公共构造函数展开表 名称描述 CAutoVectorPtr::CAutoVectorPtr 构造函数。 CAutoVectorPtr::~CAutoVectorPtr 析构函...
C++中的智能指针 这部分内容很大部分引用了一个博客,给出链接在最后 在c++中,智能指针一共定义了4种: auto_ptr、unique_ptr、shared_ptr 和weak_ptr。其中,auto_ptr 在C++11已被摒弃,在C++17中已经移除不可用。 首先是为什么要引入智能指针呢?看下一段代码: ClassName *p = new ClassName(); p -> func(...
引入了std::make_shared和std::make_unique,更加方便地创建智能指针,减少了代码中的重复和出错的可能性。 autoptr = std::make_shared<int>(42);autouptr = std::make_unique<int>(42); 12、类型别名(Type Aliases) 使用using关键字可以更方便地为类型定义别名,提高代码的可读性。
2.返回一个栈上的变量的地址、会有未定义的行为和高风险 3.返回一个 new 出来的东西的地址、并且调用者要记得返回 4.智能指针(暂时不讨论) 这样写智能指针还是错误的写法,只是简单的包装一层不会解决本质的问题、而且智能指针的初心是为了防止人们忘记释放内存 这样就对了:...
首先我们需要一个指针reference来指向资源,当智能指针构造时,用reference指针指向资源,在我们确定资源应该被析构时,我们对reference指针进行delete。 如果只有reference指针的话,只能实现出auto_ptr的效果,我们还需要添加引用计数系统counter来统计指向资源的智能指针的个数。counter不可以是一个普通的int型变量,因为不同的智...
独占指针(unique_ptr):独享所有权的智能指针,资源只能被一个指针占有,该指针不能拷贝构造和赋值。但可以进行移动构造和移动赋值构造(调用move() 函数),即一个 unique_ptr 对象赋值给另一个 unique_ptr 对象,可以通过该方法进行赋值。 弱指针(weak_ptr):指向 shared_ptr 指向的对象,能够解决由shared_ptr带来的循...