gpt4 book ai didi

c++ - Swig 和引用计数的 C++ 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:36 26 4
gpt4 key购买 nike

我的许多 C++ 对象通过 AddRef 和 FreeRef 方法实现引用计数。如果 FreeRef 将引用计数减少到 0,则该对象将删除其自身。

所有返回引用计数对象的方法都不会增加引用。这使得它变得简单,因为智能指针可以在接收到指针时简单地增加计数并在不再引用它时减少计数。例如:

template<class T> FlPtr
{
T *p;
public:
FlPtr(T *p=0):p(p){if(p)p->AddRef();}
~FlPtr(){if(p)p->FreeRef();}

FlPtr<T>& operator =(T *newP)
{
if(newP)newP->AddRef();
if(p)p->FreeRef();
p = newP;
return *this;
}
operator T*(){return p;}
};

我在想,也许我可以告诉 SWIG 只在内部使用我现有的智能指针来处理这些可能有效的对象,但是我也不确定该怎么做 :(

最佳答案

看看the SWIG documentation .基本上,如果您有一个类 Foo 并想用智能指针 Bar 包装它,您可以这样做:

%ignore Foo;
class Foo {
...
};

class Bar {
public:
Foo *operator->();
...
}

现在,当您尝试访问 Bar 实例的成员时,它将在内部使用 Foo,但这将是完全透明的。

关于c++ - Swig 和引用计数的 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com