記得剛開始使用共享指針的時候,不理解共享指針的reset(), std::make_shared<T>(args....)和構造函數: 實際上本質上是同樣的,都是將一個指針交給共享指針對象管理,只是std::make_shared<T>(args...)在自身構造函數中,利用傳輸的參數構造一個對象指針給生成的共享指針對象,即,在構造共享指針的同時分配關聯的指針ios
#include <iostream> #include <memory> using namespace std; // Ptr: 普通共享指針 // ConstPtr: 不可修改內容的共享指針 // PtrConst: 不可修改指針的共享指針,內容能夠修改 // ConstPtrConst: 只能初始化的指針,不能作任何的修改動做 #define SHARED_PTR_DEFINE(X) \ public: \ typedef std::shared_ptr<X> Ptr; \ typedef std::shared_ptr<const X> ConstPtr; \ typedef const std::shared_ptr<X> PtrConst; \ typedef const std::shared_ptr<const X> ConstPtrConst; class testA { SHARED_PTR_DEFINE(testA); public: void print() { std::cout << "testA ==> " << std::endl; } }; int main() { cout << "Hello World!" << endl; testA::Ptr ptr(new testA); testA::Ptr ptr2 = std::make_shared<testA>(); return 0; }