核心元件‎ > ‎

non cxxlObject 包裝

Smart_Ptr 只能包裹 cxxlObject 的延伸類別物件,對於不是 cxxlObject 的物件就用這裡提供的 wrapper class 包起來再丟給 Smart_Ptr,就可以同樣享有物件共享和自動 delete 的好處,這個 wrapper class 的建構函數宣告如下:

// Constructor
non_cxxlObject_wrapper(
  T *Obj,    // 要被包裹的非 cxxlObject 物件
  void (cxxlFASTCALL *FreeFunc)(T *),  // 可以指定 delete 被包裹物件的處理函數,內定是
                                       // 直接用 delete 處理

  ISpirit *spirit // 這個 class 用的放棄擁有程序,內定用 Spirit_Easy
);
 
因非 cxxlObject 的物件不具有放棄擁有程序中的搜尋擁有者的能力,所以完全依賴 non_cxxlObject_wrapper,因此若要在 CxxlMan 程式庫間當參數傳遞時,須使用 non_cxxlObject_wrapper 而不是被包裹的物件。
以下是簡單的使用範例:
 

範例

#include <iostream>
#include <SMART_PTR.HPP> 
#include <NONCXXLOBJECT.HPP>
using namespace std;
using namespace CxxlMan; 
class A // 非 cxxlObject 的類別
{
  const char *m_name;
public:
  A(const char *name) 
  {
    m_name = name;
    cout << m_name << " Constructor" << endl;
  }
  virtual ~A()
  {
    cout << m_name << " Destructor" << endl;
  }
  void Print() const
  {
    cout << m_name << " Print" << endl;
  }
};
int main(int argc, char* argv[])
{
  Smart_Ptr<non_cxxlObject_wrapper<A> > 
A1_Ptr(new non_cxxlObject_wrapper<A>(new A("A1")));
  (*A1_Ptr)->Print();
  system("pause");
  return 0;
}
 
 
 
 

引入檔

NONCXXLOBJECT.HPP 

程式庫

cxxlObject

 
Comments