shared_ptr 共享智能指针

shared_ptr 共享对象所有权的智能指针

实现shared_ptr;

该智能指针不仅需要指向性,还需要知道和谁共享资源;因此需要RefCnt

class RefCnt{

_Ty* mptr;智能指针的指向;

int ref;//用于计数

}

template<class _Ty>
class MyDeletor
{
	//MyDeletor()=default;->默认构造函数
	MyDeletor() {}
	void operatror()(_Ty* ptr)const
	{
		if (ptr != nullptr)
		{
			delete ptr;//调用delete时,会先调用析构函数
		}
	}
};
template<class _Ty>
class MyDeletor<_Ty[]>
{
	//MyDeletor()=default;->默认构造函数
	MyDeletor() {}
	void operatror()(_Ty* ptr)const
	{
		if (ptr != nullptr)
		{
			delete[]ptr;//调用delete时,会先调用析构函数
		}
	}
};

删除器MyDeletor{};

template <class _Ty>
class RefCnt
{
public:
	T* mptr;
	int ref;//用于计数
public:
	RefCnt(_Ty* ptr = nullptr) :mptr(ptr), ref(mptr != nullptr)
	{
		//ref=mptr==nullptr?0:1;
	}
	~RefCnt(){}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 SWIG 中使用智能指针(如 shared_ptr),你需要在接口文件中进行适当的声明和包装。以下是一个示例,展示了如何在 SWIG 中使用 shared_ptr。 首先,创建一个 C++ 类,例如 `Foo`,并在其头文件中添加相应的函数和成员变量: ```cpp // foo.h #include <iostream> #include <memory> class Foo { public: Foo(int value) : data(value) {} void printData() { std::cout << "Data: " << data << std::endl; } private: int data; }; ``` 然后,创建一个 SWIG 接口文件(.i 文件),用于声明和包装 C++ 类。在接口文件中,导入 `<memory>` 头文件,并使用 `%shared_ptr` 指令告诉 SWIG 如何处理 shared_ptr: ```swig // foo.i %module foo %{ #include "foo.h" %} %include <memory> %shared_ptr(Foo) %{ #include "foo.h" %} %include "foo.h" ``` 现在,你可以使用 SWIG 来生成包装器代码。运行以下命令: ```bash swig -c++ -python foo.i ``` 这将生成一个 C++ 封装器文件 `foo_wrap.cxx`,以及一个 Python 模块文件 `foo.py`。 接下来,你可以编译生成的封装器代码,并链接到 Python 解释器中。在这里,我们以 CMake 为例: ```cmake cmake_minimum_required(VERSION 3.12) project(foo) find_package(PythonLibs REQUIRED) include_directories(${PYTHON_INCLUDE_DIRS}) add_library(_foo SHARED foo_wrap.cxx) target_link_libraries(_foo ${PYTHON_LIBRARIES}) ``` 完成后,你将得到一个名为 `_foo.so` 的共享库文件,可以在 Python 中导入并使用 `Foo` 类的实例。这里是一个示例 Python 脚本: ```python import foo # 创建一个 Foo 对象的 shared_ptr foo_ptr = foo.Foo(42) # 使用 shared_ptr 调用成员函数 foo_ptr.printData() ``` 这样,你就可以在 SWIG 中使用智能指针(如 shared_ptr)来包装 C++ 类,并在 Python 中使用它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值