소멸자가 호출되는 시점에 지정한 function을 호출하는 클래스

#include <iostream>
#include <functional>

class AutoCloser
{
public:
	using NoParamFunc = std::function<void()>;

	AutoCloser() = delete;

	AutoCloser(NoParamFunc&& func)
	{
		_func = std::move(func);
		_iswork = true;
	}

	~AutoCloser()
	{
		callOnce();
	}

	void call()
	{
		_func();
	}

	void callOnce()
	{
		if (_iswork == true)
		{
			call();
			reset();
		}
	}

	void reset()
	{
		_iswork = false;
	}

private:
	NoParamFunc _func;
	bool _iswork;
};

class Test
{
public:
	~Test()
	{
		std::cout << "Test::~Test()" << std::endl;
	}
};

int main()
{
	Test* value = new Test;

	AutoCloser a([value]() 
	{
		delete value;
	});

	// do something

}
// delete value

std에 비슷한거 없나..

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다