[C#] null을 비교하기위한 여정1, ==와 Equals()
·
STUDY/유니티
if (instance == null) { instance = this; } else if (instance != this) Destroy(gameObject); 싱글톤 코드를 작성하면서 들었던 의문이 있었습니다. ==대신에 Equals()를 써서 null인지를 체크할 수는 없을까? Equals로 인한 비교는 총 두가지 방법이 있습니다. 매개변수를 1개 쓰는것과 2개쓰는것 신기하게도 instance.Equals(null)를 쓰면 에러가 뜨지만 Equals(instance,null)을 쓰면 에러가 뜨지 않았습니다. 이유는 일단 instance는 null인 상태입니다. 그리고 그 null인 instance를 참조할려고하니 NullReferenceException 오류가 뜨는건 당연했죠. 하지만 instanc..
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자
·
STUDY/Effective C++
항목13에서 본 shared_ptr(auto_ptr은 이후에 삭제되었다고한다)은 힙이 아닌 다른 자원에는 맞지않다라는 견해가 일반적이다. 하지만 모든 자원이 힙에서 생기지는 않는다. 그래서 자원 관리 클래스를 우리가 스스로 만들어야할 필요성이 있다. class Lock{ public: explicit Lock(Mutex *pm) :mutexPtr(pm) { lock(mutexPtr);} ~Lock() {unlock(mutexPtr);} private: Mutex *mutexPtr; }; 잠금을 관리하는 클래스를 하나 만들고 , RAII법칙을 따라한다고하자. Lock m11(&m); Lock m12(m11); 하지만 여기서 복사를 하게 된다면 어떻게 될까? 복사할때 이루어지는 동작과 관련해서 선택지를 고를..
[Unity] 오브젝트 transform 안먹히는 현상/ Combined mesh 로 인한 오브젝트 정적현상/ collider만 작동하는 현상 오류 해결
·
ERROR/오류덩어리들
현상 : 프로젝트를 실행시키고나서 오브젝트들이 회전을 해야하는데 하지않았습니다. 살펴보니 씬에서는 오브젝트의 콜라이더만 정상적으로 작동하고, 오브젝트는 작동하지않았습니다. 인스펙터창에 Rotation도 콜라이더와 똑같이 정상적으로 작동하였으나, 오브젝트만! 움직이지않았죠. 원인 : 원인은 Mesh때문이었습니다. 정확하게 말하면 Combined Mesh (root:scene) 2(Mesh Filter) 때문이었죠. 해결: 인스펙터창에 static 중, Batchong Static을 풀어주면됩니다. 회전이 잘됩니다. 원인분석: Batchong Static 은 움직이지않는 동일한 재질을 공유하고있는 오브젝트들을 일괄처리함으로써 드로우콜을 줄여 최적화를 자동으로 도와줍니다. 씬을 시작할때 작동하며, 런타임중에는..
항목 13: 자원관리에는 객체가 그만!
·
STUDY/Effective C++
자원을 객체에 넣음으로써, C++가 자동으로 호출해 주는 소멸자에 의해 해당 자원을 저절로 해제할 수 있다. 표준라이브러리에 auto_ptr클래스가 있는데, 이 클래스는 포인터와 비슷하게 동작하는 스마트포인터로서 가리키고있는 대상에 대해 소멸자가 자동으로 delete를 불러주도록 설계되어있다. void f() { Investment *pInv(createInvestment()); //createInvestment() 는 Investment 클래스의 객체를 동적할당하고 포인터 반환함수 ... delete pInv; } void f() { std::auto_ptrpInv(createInvestment()); ... } 위의 코드에서는 delete에 도달하기전에 빠져나갈 요소들이 분명 많아보이지만, 밑에 au..