24#ifndef LSST_CPPUTILS_PYTHON_PYSHAREDPTR_H
25#define LSST_CPPUTILS_PYTHON_PYSHAREDPTR_H
27#include "pybind11/pybind11.h"
49class PySharedPtr final {
62 PyObject* pyObj = pybind11::cast(ptr).ptr();
66 if (obj !=
nullptr) Py_DECREF(obj);
81 T*
get() const noexcept {
return _impl.get(); }
89namespace utils = cpputils;
A shared pointer that tracks both a C++ object and its associated PyObject.
operator std::shared_ptr() noexcept
PySharedPtr(PySharedPtr &&) noexcept=default
PySharedPtr(T *const ptr)
Create a pointer that counts as an extra reference in the Python environment.
PySharedPtr(PySharedPtr const &) noexcept=default
PYBIND11_DECLARE_HOLDER_TYPE(T, lsst::cpputils::python::PySharedPtr< T >)