具有相同类类型成员的类

时间:2012-06-02 02:22:22

标签: c# c++

我在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#编译得很好。如何在这里计算物体的大小?

1 个答案:

答案 0 :(得分:9)

它在 C#中工作的事实是所有对象都作为指针处理。也就是说,您的C#代码将等同于此 C ++ 代码:

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

指针的大小是已知的,因此所有内容都会编译。根本不需要知道对象的大小。但是,你不想在 C ++ 中投掷指针,特别是原始指针。

请注意,在原始实现中,对象的大小不仅是未知的,而且也是无限的,因为每个Container包含另一个Container,其中包含另一个Container等等。

相关问题