2013-02-03 2 views
-1

Xcode 4.6에서 믿을 수 없습니다.ARC 때문에 Xcode 4.6이 다운 되나요?

변수를 초기화하면 메모리가 비워집니다. 그러나이 변수에 임의의 값이 있으면 어떨까요?

class X 
{ 

private: 

    NSThread* thr; 

public: 

    X(); 
}; 
X :: X() 
    { 
     thr = 0; // BOOM !!!? 
    } 
X* x = new X(); // Constructor crashes. 

그러나 생성자가 인라인 인 경우에는 그렇지 않습니다.

+0

Xcode와 어떤 관련이 있습니까? 다른 IDE를 사용하면 실제로 그렇게하지 않을 것이라고 생각하십니까? –

+0

Xcode 4.5에서는 예상대로 작동했습니다. Xcode 4.6에서 충돌이 발생하면 어떻게 변수를 초기화해야합니까? – Michael

+1

@ ericorr 그들은 그렇지 않습니다. C 및 C++에서 상수 값 '0'은 포인터에 할당되거나 비교 될 때 암시 적으로 'NULL'로 처리됩니다. –

답변

3

C++ 생성자에서 initialization list을 사용하여 멤버 변수의 초기 값을 설정해야합니다.

X :: X() : thr(nil) 
{ 
} 

그렇지 않으면, 당신이보고있는 것처럼, thr 처음에 쓰레기 값이되며, ARC는 그 값에 -release를 보내려고 할 때이 충돌 할 수 있습니다. ARC documentation로서

말한다 :

ARC 동적 메모리 잠재적 값을 대체하기위한 하나를 "초기화"의도 된 할당 연산자를 구별 할 수 없다.

관련 문제