概要
4つ方法があります。
- 関数オブジェクトを使用する方法
- 一般関数
- Lambda式
- std::default_delete式
1. 関数オブジェクトを使用する方法
class Deleter
{
public:
void operator() (MyClass *x) {
delete[] x;
}
};
int main(int argc, char** args)
{
std::shared_ptr<MyClass> p2(new MyClass[5], Deleter);
return 0;
}
2. 一般関数
関数deleter
はカスタムデリーターです。
void deleter(MyClass *x)
{
std::cout << "Deleter function called" << std::endl;
delete x;
}
std::shared_ptr<MyClass> p1(new MyClass, deleter);
3. Lambda式
int main(int argc, char** args)
{
shared_ptr<MyClass> objClass(
new MyClass(), [](MyClass* obj)
{
if (obj)
{
obj->cleanup();
delete obj;
}
});
return 0;
}
4. std::default_delete式
std::default_delete
は、C++ 標準ライブラリで提供されている削除器(デリータ)のデフォルト実装です。これは、delete 演算子を使用してリソースを解放する単純な関数オブジェクトです。
std::shared_ptr<MyClass> p(new MyClass[5], std::default_delete<MyClass[]>());