cpp_RAII - 8BitsCoding/RobotMentor GitHub Wiki
RAII ์ ์ : ์์์ ์์ ํ๊ฒ ์ฐ๊ธฐ ์ํด์ ํด๋น ์ค์ฝํ๋ฅผ ๋ฒ์ด๋๋ฉด ์์์ ํด์ ํด์ฃผ๋ ๊ธฐ๋ฒ์ด๋ค.
// Example void Func() { ClassB * B = new ClassB(); // do something. delete B; } // ์ ์ฝ๋๋ ์ข์ง ๋ชปํ ์ฝ๋ void Func() { ClassB B; }
์ฐ์ ์๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ์์ธกํด๋ณด์.
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* do_loop(void *data)
{
pthread_mutex_lock(&mutex);
// Do anything.
pthread_mutex_unlock(&mutex);
}๋๋์ด ์ค๊ฒ ์ง๋ง ์ฝ๋์ Do anything์์ ์ฝ๋๊ฐ ์ฃฝ์ ์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๊ฒ๋๋ค.
ํด๊ฒฐ์ฑ ์??
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
class Lock {
private:
pthread_mutex_t m_mutex = PTHREAD_MUTEX_INITIALIZER;
public:
explicit Lock(pthread_mutex_t mutex) {pthread_mutex_lock(&mutex); m_mutex = mutex;};
~Lock() {pthread_mutex_unlock(&mutex);};
}
void * do_loop(void* data)
{
Lock mylock(&mutex);
// Do anything
// ํด๋น ํจ์๊ฐ ๋๋๋ฉด ์๋์ผ๋ก ์๋ฉธ์ ํธ์ถ๋จ.
}int function_A() {
std::tr1::shared_ptr<dog> pd(new dog());
// dog pd = new dog();
// ์ผ ๊ฒฝ์ฐ dog ํ ๋น๋ dog๋ ํด๋นํจ์์์ ์ ์ ํ๊ฒ ์ง์์ฃผ์ง ์๋๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ฆญ์ด ๋ฐ์ํ๋ค.
// ํด๊ฒฐ์ฑ
-> shared_ptr
// ์ค๋งํธ ํฌ์ธํฐ์ ์ฅ์ ์ ์ด๋ฆฌ๋ ๋ฐฉ๋ฒ.
// ํด๋น ์ค๋ธ์ ํธ ์ข
๋ฃ ์ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ฐํ
}class dog;
class Trick;
void train(tr1::shared_ptr<dog> pd, Trick dogtrick);
Trick getTrick();
int main() {
tr1::shared_ptr<dog> pd(new dog());
train(pd, getTrick());
}