summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/python/m5/SimObject.py18
-rw-r--r--src/python/pybind11/core.cc5
2 files changed, 15 insertions, 8 deletions
diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index 569142e34..baeef73d9 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -701,10 +701,13 @@ module_init(py::module &m_internal)
''')
code.indent()
if cls._base:
- code('py::class_<${cls}Params, ${{cls._base.type}}Params>(m, ' \
- '"${cls}Params")')
+ code('py::class_<${cls}Params, ${{cls._base.type}}Params, ' \
+ 'std::unique_ptr<${{cls}}Params, py::nodelete>>(' \
+ 'm, "${cls}Params")')
else:
- code('py::class_<${cls}Params>(m, "${cls}Params")')
+ code('py::class_<${cls}Params, ' \
+ 'std::unique_ptr<${cls}Params, py::nodelete>>(' \
+ 'm, "${cls}Params")')
code.indent()
if not hasattr(cls, 'abstract') or not cls.abstract:
@@ -729,10 +732,13 @@ module_init(py::module &m_internal)
cls.cxx_bases
if bases:
base_str = ", ".join(bases)
- code('py::class_<${{cls.cxx_class}}, ${base_str}>(m, ' \
- '"${py_class_name}")')
+ code('py::class_<${{cls.cxx_class}}, ${base_str}, ' \
+ 'std::unique_ptr<${{cls.cxx_class}}, py::nodelete>>(' \
+ 'm, "${py_class_name}")')
else:
- code('py::class_<${{cls.cxx_class}}>(m, "${py_class_name}")')
+ code('py::class_<${{cls.cxx_class}}, ' \
+ 'std::unique_ptr<${{cls.cxx_class}}, py::nodelete>>(' \
+ 'm, "${py_class_name}")')
code.indent()
for exp in cls.cxx_exports:
exp.export(code, cls.cxx_class)
diff --git a/src/python/pybind11/core.cc b/src/python/pybind11/core.cc
index 7ad45b408..159b19f9d 100644
--- a/src/python/pybind11/core.cc
+++ b/src/python/pybind11/core.cc
@@ -132,7 +132,8 @@ init_serialize(py::module &m_native)
{
py::module m = m_native.def_submodule("serialize");
- py::class_<Serializable>(m, "Serializable")
+ py::class_<Serializable, std::unique_ptr<Serializable, py::nodelete>>(
+ m, "Serializable")
;
py::class_<CheckpointIn>(m, "CheckpointIn")
@@ -165,7 +166,7 @@ init_range(py::module &m_native)
.def("isSubset", &AddrRange::isSubset)
;
- // We need to make vectors of AddrRange opaque to avoid a weird
+ // We need to make vectors of AddrRange opaque to avoid weird
// memory allocation issues in PyBind's STL wrappers.
py::bind_vector<std::vector<AddrRange>>(m, "AddrRangeVector");