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 |
|