前言
智能指针是模板类中的内容,为了避免野指针,悬挂指针,内存泄漏的问题。它存储了申请了堆内存后返回的指针。C++11后有三种类型的指针: shared_ptr, unique_ptr, weak_ptr
一、std::unique_ptr
#include <iostream>
int main() {
int* a = new int;
int* b = a;
delete a;
std::unique_ptr<int[]> intPtr{ new int[3] {1,2,3} };
std::unique_ptr<int[]> intPtrD{ std::make_unique<int[]>(5) };
std::unique_ptr<int> intPtrA{ new int(5) };
std::unique_ptr<int> intPtrB{ std::make_unique<int>(5) };
std::unique_ptr<int> intPtrC{};
intPtrB.reset();
int* resultPtr = intPtrB.get();
int* resultPtrA = intPtrB.release();
std::cout << intPtr << " " << intPtr[1] << std::endl;
std::cout << intPtrC << " " << intPtrA << std::endl;
intPtrC = std::move(intPtrA);
std::cout << intPtrC << " " << intPtrA << std::endl;
}
二、std::shared_ptr
#include <iostream>
int main() {
int* a{};
std::shared_ptr<int> ptrA{ std::make_shared<int>(6) };
std::shared_ptr<int> ptrB{ ptrA };
std::shared_ptr<int> ptrC{ new int[3] {1,2,3} };
std::cout << ptrA << " " << *ptrA << std::endl;
std::cout << ptrB << " " << *ptrB;
}