【发布时间】:2010-12-17 02:12:39
【问题描述】:
在 C# 中创建对象实例时
Myclass mc = new Myclass();
这个mc 现在是对在内存中创建的Myclass 对象的引用。这就像一个指向那个记忆的“指针”。
它是否与在(托管或非托管)C++ 中执行此操作相同或可比:
MyCppClass *mcCppClass = new MyCppClass();
因为这实际上创建了一个指向类的对象实例的指针。
我只是想找出到底有什么区别?
【问题讨论】:
-
因此 C++ 指针可以指向内存中已经存在的对象,也可以在内存中创建新对象。虽然你也可以在 C# 中做到这一点......你什么时候会在 C++ 中创建对对象的引用,然后你会创建指向该对象的指针?
-
根据我的经验,通常在将参数传递给函数时使用引用。如果您有一个对象并按值传递它,则会复制该对象,这可能会很昂贵,具体取决于复制构造函数和析构函数的作用。但是,如果将其作为引用传递,则可以避免复制构造函数和析构函数调用的开销。它通常更有效。
-
抱歉听起来很傻,但是 C# 引用可以引用任何相同类型的对象。因为可以在 C# 中更改对象引用。 C++ 中的引用总是指向它所引用的任何东西的同一个实例。对吗?
-
@Tony:对。 C++ 引用是对象的不同名称(松散地使用术语),您不能更改哪个对象。 C++ 具有执行 C# 引用将执行的任何操作(包括自动销毁)但不在同一个包中的构造。