棧上的東西如何存在?
棧是類似一種資料結構 ,像摞在桌子上的一堆書,要看中間的書需要把上面的書拿走
作用域:
形象成一本書,書內宣告的變數作用域結束,要把這本書從書堆中拿出來
作用域指標
是什麼:
基本是個類 是一個指標的包裝器,在構造時用堆分配指標
析構時刪除指標,可以實現自動化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()
{
}