【发布时间】:2020-04-07 10:25:49
【问题描述】:
我想将 C 类型包装到 CPP 类中,以便更好地处理内存。例如下面的代码 sn-p 大致显示了我想做的事情:
class TJCompressor
{
public:
TJCompressor()
: m_tjInstance(tjInitCompress())
{
if (m_tjInstance == nullptr)
throw std::runtime_error("Could not create a TJ compressor instance");
}
~TJInstance()
{
tjDestroy(m_tjInstance);
}
const tjhandle& operator()() const
{
return m_tjInstance;
}
private:
tjhandle m_tjInstance = nullptr;
};
但是,现在我需要通过operator()() 访问实际的 tjhandle,我希望摆脱它。
TJCompressor compressor;
tjDecompressHeader3(decompressor(), ... ); // works as expected
tjDecompressHeader3(decompressor, ... ); // preferred way of doing it
我很确定这是可以实现的,但不知何故我找不到任何关于如何做到这一点的信息。
【问题讨论】:
-
小心或 3/5/0 规则。可以使用带有适当删除器的 std::unique_ptr`。
-
将函数也封装在类中而不暴露 C 类会更好吗?
标签: c++ operator-keyword raii conversion-operator