C++11&QT复习 (七)

智能指针雏形

    • **Day7-1 智能指针雏形:独占语义与共享语义**
      • **1. 独占语义与共享语义**
        • **1.1 Circle 类:示例类**
      • **2. 拷贝构造:独占语义(Unique Ownership)**
        • **2.1 代码解析**
      • **3. 拷贝构造:共享语义(Shared Ownership)**
        • **3.1 代码解析**
      • **4. 智能指针 std::unique_ptr 和 std::shared_ptr**
        • **4.1 代码解析**
      • **5. 移动语义(Move Semantics)**
        • **5.1 代码解析**
      • **总结**

Day7-1 智能指针雏形:独占语义与共享语义

1. 独占语义与共享语义

在 C++ 中,拷贝构造的语义可以分为独占语义共享语义

  • 独占语义(Unique Ownership):每个对象拥有一块独立的内存,拷贝时进行深拷贝
  • 共享语义(Shared Ownership):多个对象共享同一块内存,拷贝时进行浅拷贝,通常需要引用计数来管理资源。

C++ 标准库提供了 std::unique_ptrstd::shared_ptr 来实现这两种语义。

1.1 Circle 类:示例类

Circle 类是一个普通的对象类,包含构造函数、析构函数、成员变量和方法。

// Circle.h
#pragma once
#include 
#include 
using namespace std;

//关键字
//const
const int global_a = 10;
//static
static int s_b = 10;
//extern
extern int SIZE = 10;
//三者的用途:const 修饰常量,static 修饰全局变量,extern 修饰外部变量

class Circle
{
   
public:
    Circle(double r = 0)
        : _r(r)
    {
   
        cout << "Circle(double r = 0)" << endl;
    }

    Circle(double r, char* name)
        : _r(0), _name(new char[strlen(name) + 1])
    {
   
        strcpy_s(_name, strlen(name) + 1, name);
        cout << "Circle(double r, char* name)" << endl;
    }

    ~Circle()
    {
   
        cout << "~Circle()" << endl;
        delete[] _name;
    }

    double getRadius()<

你可能感兴趣的:(QT_C++,c++,qt,java)