首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Effective C++ 條款 45:成員函數模板實現智能指針隱式轉換

     編輯:關於C++

背景:智能指針的類型轉換難題

普通指針支援隱式向上轉型(派生類指針 → 基類指針)。但智能指針 SmartPtr<Derived> 和 SmartPtr<Base> 是無關類型,無法隱式轉換。需通過成員函數模板實現「通用構造函數」。

通用構造函數模板

template
class shared_ptr {
public:
    shared_ptr(const shared_ptr& r);                    // 顯式拷貝構造
    template
    shared_ptr(const shared_ptr& r);                 // 通用構造
    
    shared_ptr& operator=(const shared_ptr& r);         // 顯式拷貝賦值
    template
    shared_ptr& operator=(const shared_ptr& r);      // 通用賦值
};

應用場景總結

  • 智能指針隱式向上轉型(SmartPtr<Derived> → SmartPtr<Base>)。
  • 自定義類型間的安全隱式轉換(需滿足底層指針可轉換)。
  • STL 容器、迭代器、std::shared_ptr 等標準庫組件廣泛採用此模式。

核心收穫

成員函數模板讓類模板不同實例間建立類似繼承的隱式轉換關係,同時保持類型安全。記住:提供通用構造/賦值時,必須同步提供普通拷貝構造/賦值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved