2012-06-02 5 views
0

I 컴파일되지 않습니다 C++에 다음 코드가 : 내가의 크기를 추측 할 수없는 동일한 유형 및 컴파일러와 회원을 가지고 있기 때문에클래스 같은 클래스 형의 멤버를 가진

class Container; 
class Container 
{ 
    std::string m_Name; 
    Container m_Container; 
}; 

입니다을 여기에 개체.

C#을 사용하여이 작업을하려면 어떻게해야합니까?

namespace Sample 
{ 
    public class Container 
    { 
     public string m_Name; 
     public Container m_Container; 
    } 
} 

namespace Sample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Container con = new Container(); 

     } 
    } 
} 

이 코드는 C#에서 잘 컴파일됩니다. 여기 개체의 크기는 어떻게 계산 되었습니까?

+2

, 당신이 경험할 것 구조체와 고통. 'struct C {C c; }'예를 들어. –

답변

9

C#에서 작동한다는 사실은 모든 개체가 포인터로 처리된다는 것입니다. 즉, 귀하의 C# 코드는이 C++ 코드에 해당 될 것입니다 :

class Container; 
class Container 
{ 
    std::string* m_Name; 
    Container* m_Container; 
}; 

포인터의 크기는 알려져 있으며, 따라서 모든 컴파일된다. 객체의 크기를 전혀 알 필요가 없습니다. 그러나 C++에서 포인터를 던지기를 원하지 않습니다. 특히 원시 포인터입니다. 각 Container 그래서 다른 Container 등을 포함하는 다른 Container를 포함하고 있기 때문에 원래의 구현에, 개체의 크기뿐만 아니라 알 수없는 그러나 그것 또한 무한하다

주 ...

C#에서
관련 문제