首页 > 系统相关 >对象的生存期 内存 深度拷贝 拷贝构造函数 笔记

对象的生存期 内存 深度拷贝 拷贝构造函数 笔记

时间:2024-07-14 13:07:47浏览次数:16  
标签:int Entity 生存期 new 拷贝 构造函数 ptr 指针

栈上的东西如何存在?
栈是类似一种数据结构 ,像摞在桌子上的一堆书,要看中间的书需要把上面的书拿走
作用域:
形象成一本书,书内声明的变量作用域结束,要把这本书从书堆中拿出来

作用域指针

是什么:
基本是个类 是一个指针的包装器,在构造时用堆分配指针
析构时删除指针,可以实现自动化new和delete
写法;
引用
std::unique_ptr<类名>名字;
代码示例:

class Entity
{
public:
	int x, y;//this指向这里
	Entity(int x, int y)
	{
		this->x = x;
		this->y = y;
	}
};
class ptr
{
private:
	Entity* m_ptr;
public:
	ptr(Entity* ptrs)
		:m_ptr(ptrs)
	{

	}
	~ptr()
	{
		delete m_ptr;
	}
};
int main()
{
	Entity* hh = new Entity(1,2);
	ptr phh(hh);
}

智能指针

是什么:
是原始指针的包装
作用:
当你使用new时不用delete

unique_ptr

甚至不用new实现自动化
代码示例:unique_ptr
注意:不能被复制

int main()
{
   std::unique_ptr<Entity>entity (new Entity());//普通构建 
若是构造函数碰巧抛出异常会造成内存泄漏
   std::unique_ptr<Entity>entity (new Entity())=std::make_unique<Entity>();//
//这种写法会避免上面的问题
{

shared_ptr

工作方式:引用计数
是什么:
基本上是一种方法
作用:
跟踪你的指针有多少个引用当引用计数为零时,它会被删除;
写法:
std::shared_ptrshared=std::make shared();
内存分配:
分配一块内存块用来存储引用个数;
先创建一个new Entity 传给shared_ptr构造函数,要做两次内存分配,先做一次new Entity的分配然后是shared_ptr的控制内存块分配。

weak_ptr 弱指针

用法:
std::weak_ptrweak=sharedEntity://弱指针引用shared_ptr指针不会增加引用数;

memcpy()

写法:
memcpy(目的地;来源;大小)
代码示例:

class String
{
private:
    char*m_Buffer;
    unsigned int m_Size;
public:
    String(const String&other)
       :m_size(other.m-_size)
     memcpy(m_Buffer,other.m_Buffer,m_size)
}
int main()
{
  String string="wzs";
  String second=string;
second[2]='a';
打印结果为
}

深拷贝

实际上复制了 整个对象
实现:
通过拷贝构造函数,拷贝构造函数是一个构造函数
复制构造函数是什么:
要复制的变量和正在创建的变量同一类型,
代码示例:
int main()
{

}

浅拷贝

不会去到指针的内容或指针指向的地方,也不会去复制它
默认拷贝构造函数
代码示例:

string (const string&other)
:m_Buffer(other.m_Buffer),m_size(other.m_size)
{}
suing string=std::string
int main()
{
 
}

标签:int,Entity,生存期,new,拷贝,构造函数,ptr,指针
From: https://www.cnblogs.com/WZline/p/18301370

相关文章

  • 深入解析C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符
    深入解析C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符在C++编程的浩瀚宇宙中,构造函数、析构函数、拷贝构造函数和赋值操作符是构成对象生命周期和行为的四大基石。它们各自扮演着不可或缺的角色,确保了对象从创建到销毁,从复制到赋值的整个过程既安全又......
  • 构造、析构、拷贝(Semantics of Construction,Destruction,and Copy)
    1、继承体系下的对象构造当我定义一个object如下Tobject;如果T有一个默认构造函数,它会被调用。比较不明显的是构造函数内部有大量的隐藏代码,因为编译器会扩充构造函数,一般而言编译器所做的扩充如下:记录在成员初始化列表中的数据成员初始化操作会被放到构造函数体中,并......
  • c++初始化列表和构造函数初始化的区别
    在C++中,初始化列表和构造函数初始化是两种不同的方法用于初始化类的成员变量。初始化列表(InitializationList):初始化列表是在构造函数的参数列表后面使用冒号(:),然后跟随着每个成员变量的初始化方式。通过初始化列表,可以在对象构造时直接为成员变量赋值,而不是在构造函数体内......
  • 【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现
    前言什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:基本数据类型(6种)String、Number、Object、Boolean、null、undefined、symbol(ES6+)引用数据类型Object(function、Array、正则表达式等皆......
  • 构造函数初始化列表 笔记
    什么意思:初始化类成员的一种方法什么时候用:编写一个类并向该类中添加成员时要用某种方式对这些成员进行初始化代码示例:classEntity{private:std::stringm_name;intm_score;public:Entity():m_name("UnKnown"),m_score(0)//成员初始化列表{}}注......
  • 游戏陪玩app开发,必须知道的拷贝代码
    游戏陪玩app开发,必须知道的拷贝代码(数组/对象)(深/浅)拷贝letlist=[{name:"o"}];letobj={stu:{name:"o"}};//数组浅拷贝letlistCopy1=[].concat(list);letlistCopy2=list.slice();letlistCopy3=Array.from(list);letlistCopy4=[...li......
  • java实现浅拷贝与深拷贝
    目录浅拷贝 深拷贝实现cloneable接口序列化浅拷贝浅拷贝是指创建一个新的对象,该对象的内容是原始对象中各项的引用。换句话说,浅拷贝仅复制了原始对象中元素的引用,而不是元素本身的拷贝classPeopleimplementsCloneable{privateStringname;privateint......
  • OpenCV中的浅拷贝和深拷贝
    文章目录前言一、浅拷贝二、深拷贝三、比较总结前言在数字图像处理中,针对读取到的一张图像,需要反复利用这张图像做各种的变换,以满足我们项目的需求。在这之前,最容易忽略的一点就是图像之间的拷贝问题,其中的浅拷贝和深拷贝不仅影响数据的存储方式,还直接关系到内存管......
  • JavaScript复习记录(2)— 浅拷贝&深拷贝
    1、前情概要1.1、基本数据类型    Number、String、Boolean、Null、Undefined、Symbol、BigInt。基本数据类型是直接存储在栈中的数据。1.2、引用数据类型    Object、Array、Function、Date、RegExp、Map、Set、WeekMap、WeekSet、Promise、Error、Buffe......
  • js浅拷贝与深拷贝的区别和实现方式
           ......