본문 바로가기

Software/C++

C++ 스마트포인터 참조금지, 대입금지 C++ 스마트포인터에서 참조계수 방법은 편리하기는 하지만 어째든 참조계수가 더 부담된다. 한번만 사용하고 복사나 대입을 금지하는 포인터를 만들면 참조계수 부담이 적고 destroy될때 메모리에서 정리된다.참조계수 기반과 다르게 refbase를 상속받지 않는 int같은형도 가능하다. 즉 sp p1 이런게 가능하다. template class sp{T* obj;sp(const sp&) //복사 금지void operator=(const sp& ) //대입금지public:~sp() { delete obj; } sp(T* p = 0) : obj(p) {} T* operator->() { return obj; } T& operator*() { return *obj; } }; 더보기
C++ Smart Pointer 참조계수 기반 C++ Smart Pointer는 Pointer일반기능(복사,생성,대입,)과 자동 Memory해제 기능을 지원하는 객체를 말한다. smart pointer는 객체에서 Reference count를 해서 더이상 참조하는 경우가 없으면 자동으로 obj를 Free시켜준다. 1 아래와 같이 Smart pointer기본 개념은 아래와 같다.class dog{public :void bark() { printf("bark bark"); }}; class sp { //dog객체를 위한 전용 smart pointerdog* obj;public :~sp() { delete obj; } // scope를 벗어날때 자동으로 Destroy되도록 지원한다.sp(dog* p = 0) : obj(p) {} // 생성자 obj값을 초.. 더보기
C++참조변수-2 참조변수 2. 이번에는 임시객체(temporary object)를 최소화 하기 위해 사용되는 경우를 정리 하겠습니다. struct Data { int a, b;}; Data d ={1,2); Data test() // Data개체를 넘기게 됩니다.{ return d; } int main(){ test().a = 10// d.a 는 어떤값을 가지게 될까요.? 이값은 그냥 1입니다.위에 내용은 정상적으로 컴파일되지만, 문제는 test()에서 넘어오는 Object가 임시객체이기 때문입니다. test().a =10에서 사용되고 Destroy됩니다.test()함수에서 return d;는 임시객체를 만들고 전달하게 됩니다.이런 임시객체는 성능과 Memory에 좋치 않습니다. 아래와 같이 적용하면 임시객체를 사용하지.. 더보기
C++ 참조변수-1 오늘은 참조변수에 대해서 알아보겠습니다.변수를 만든다는것은 Memory를 잡는다는거죠. 하지만 아닌경우도 있습니다. int a = 10; // 변수선언을 했네요. Memory를 할당하는거죠.int* b = &a; // Pointer변수를 선언했네요. Pointer를 Memory 에 할당했습니다.int& r = a // C++에서는 참조라는것도 있습니다. 기존 변수(Memory)에 별명입니다. r =20; 을 수행하면 a에 20이 저장되죠. 참조는 기존 Memory에 별명이기 때문에 대부분 Memory를 사용하지 않치만. 일부 컴파일러나 복잡한 Code에서는 Pointer Memory를 사용할 수 있습니다. 아래와 같은 경우는 어떻게 될까요?. Call by value, Call by Pointer도 아니.. 더보기