std::unique_ptr 是 C++11 引入的一種智能指針類型,用來(lái)管理動(dòng)態(tài)分配的內(nèi)存。與其他智能指針類型不同,unique_ptr 一個(gè)指針只能管理一塊內(nèi)存,并且它不支持復(fù)制和賦值操作,因此它也被稱為“獨(dú)占指針”。
下面是 unique_ptr 的一些主要特點(diǎn):
獨(dú)占所有權(quán):每個(gè) unique_ptr 實(shí)例獨(dú)占所指向?qū)ο蟮乃袡?quán),即一個(gè)對(duì)象只能被一個(gè)實(shí)例所擁有。
自動(dòng)釋放內(nèi)存:當(dāng)一個(gè) unique_ptr 實(shí)例離開(kāi)其作用域時(shí),它所管理的內(nèi)存會(huì)被自動(dòng)釋放。
無(wú)復(fù)制和賦值:unique_ptr 禁止復(fù)制和賦值操作的發(fā)生,從而避免了所有權(quán)的二義性。
支持移動(dòng)語(yǔ)義:unique_ptr 可以通過(guò)移動(dòng)語(yǔ)義轉(zhuǎn)移所有權(quán),即將一個(gè) unique_ptr 對(duì)象的所有權(quán)移動(dòng)給另一個(gè) unique_ptr 對(duì)象。
下面是一個(gè)使用 unique_ptr 的簡(jiǎn)單示例:
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> ptr(new int(42)); // 創(chuàng)建一個(gè)包含值為 42 的 int 類型的 unique_ptr
std::cout << *ptr << std::endl; // 輸出 42
*ptr = 100; // 修改所指向的值
std::cout << *ptr << std::endl; // 輸出 100
// 當(dāng) ptr 離開(kāi)作用域時(shí),所指向的內(nèi)存會(huì)被自動(dòng)釋放
return 0;
}
值得注意的是,在使用 unique_ptr 所管理的內(nèi)存時(shí),應(yīng)該避免直接使用裸指針操作,而是應(yīng)該使用 unique_ptr 的成員函數(shù)進(jìn)行操作,以確保內(nèi)存的正確釋放和管理。