簡體   English   中英

具有相同班級類型成員的班級

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM