0

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

4

1 回答 1

9

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

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

指针的大小是已知的,因此一切都可以编译。根本不需要知道对象的大小。但是,您不想在C++中到处乱扔指针,特别是原始指针。

请注意,在您的原始实现中,对象的大小不仅是未知的,而且也是无限的,因为每个对象都Container包含另一个对象,而对象对象又Container包含另一个对象Container,依此类推……

于 2012-06-02T02:23:50.920 回答