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

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

作用域指针

是什么:
基本是个类 是一个指针的包装器,在构造时用堆分配指针
析构时删除指针,可以实现自动化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()
{
 
}
posted @ 2024-07-14 13:03  Wzline  阅读(1)  评论(0编辑  收藏  举报