[英]Class having a member of same class type
我在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#中可以正常編譯。 這里如何計算對象的大小?
它在C#中工作的事實是所有對象都作為指針處理。 也就是說,您的C#代碼將等效於以下C ++代碼:
class Container;
class Container
{
std::string* m_Name;
Container* m_Container;
};
指針的大小是已知的,因此所有內容都可以編譯。 完全不需要知道對象的大小。 但是,您不想在C ++中拋出指針,特別是原始指針。
請注意,在您的原始實現中,對象的大小不僅是未知的,而且是無限的,因為每個Container
包含另一個Container
,該Container
包含另一個Container
,依此類推...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.