我在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#编译得很好。如何在这里计算物体的大小?
答案 0 :(得分:9)
它在 C#中工作的事实是所有对象都作为指针处理。也就是说,您的C#代码将等同于此 C ++ 代码:
class Container;
class Container
{
std::string* m_Name;
Container* m_Container;
};
指针的大小是已知的,因此所有内容都会编译。根本不需要知道对象的大小。但是,你不想在 C ++ 中投掷指针,特别是原始指针。
请注意,在原始实现中,对象的大小不仅是未知的,而且也是无限的,因为每个Container
包含另一个Container
,其中包含另一个Container
等等。