栈上的东西如何存在?
栈是类似一种数据结构 ,像摞在桌子上的一堆书,要看中间的书需要把上面的书拿走
作用域:
形象成一本书,书内声明的变量作用域结束,要把这本书从书堆中拿出来
作用域指针
是什么:
基本是个类 是一个指针的包装器,在构造时用堆分配指针
析构时删除指针,可以实现自动化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_ptr
内存分配:
分配一块内存块用来存储引用个数;
先创建一个new Entity 传给shared_ptr构造函数,要做两次内存分配,先做一次new Entity的分配然后是shared_ptr的控制内存块分配。
weak_ptr 弱指针
用法:
std::weak_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