#include "smart_ptr.h"

// 基本
void base()
{
    // 1. shared_ptr 智能指针用于智能管理内存管理动态分配的内存,可以确保在不再需要使用某段内存时进行自动释放,避免内存泄漏。
    //   通过跟踪引用计数或者其他机制,智能指针可以在不再有任何引用指向分配的内存时释放它。

    // 2. weak_ptr 用于解决 shared_ptr 的循环引用的问题。
    //    (1) weak_ptr 只能从 shared_ptr 对象构建。
    //    (2) weak_ptr 并不影响动态对象的生命周期,即其存在与否并不影响对象的引用计数器。当 weak_ptr 所指向的对象因为 shared_ptr 计数器为 0 而被释放后,
    //        那么 weak_ptr 的 lock 方法将返回空。
    //    (3) weak_ptr 并没有重载 operator-> 和 operator * 操作符,因此不可直接通过 weak_ptr 使用对象。
    //    (4) 提供了 expired() 与 lock() 成员函数,前者用于判断 weak_ptr 指向的对象是否已被销毁,后者返回其所指对象的 shared_ptr 智能指针(对象销毁时返回”空“ shared_ptr ),
    //        如果返回 shared_ptr,那么计数器会加1.
}

// 测试用例
void test_example()
{
    MSmartPointer<CHouse> p1(new CHouse());
    MSmartPointer<CHouse> p2;
    p2 = p1;
}