C#对象和C++对象,区别

标签 c# c++ pointers

在 C# 中创建对象实例时

Myclass mc = new Myclass();

这个 mc 现在是对在内存中创建的 Myclass 对象的引用。它就像是那个内存的“指针”。

它是否与在(托管或非托管)C++ 中执行此操作相同或相当:

MyCppClass *mcCppClass = new MyCppClass();

因为这实际上创建了一个指向类的对象实例的指针。

我只是想找出到底有什么区别?

最佳答案

一个似乎还没有人提到的重要区别是:

Myclass mc = new Myclass();

在 C# 中,这是创建新对象的唯一正确方法。当您需要一个对象时,这就是您创建它的方式。

MyCppClass *mcCppClass = new MyCppClass();

在 C++ 中,这就是您可以创建对象的方式,以及您偶尔必须如何创建对象的方式。在 C++ 中使用这种方法的问题在于:

    与托管语言相比,
  • new 在 C/C++ 中非常慢。如果用于分配您需要的每个对象,将会造成伤害。
  • 对象没有固定的生命周期。它分配在堆上,并且在您对其调用 delete 之前不会被销毁。如果您忘记这样做,它永远不会被销毁。如果你调用 delete 两次,你的程序就会崩溃。

在 C++ 中,您有两种创建对象的方法: 您在上面使用的那个:

// 1
MyCppClass *myobject = new MyCppClass();
delete myobject;

但修改为也包含 delete 调用,因为没有它,您将泄漏内存。 无论何时使用 new,您迟早也必须调用 delete。一个没有另一个通常是错误的。

第二种更常见的方法:

// 2
MyCppClass myobject;

第二个在某些方面更类似于您的 C# 示例。它的生命周期由系统自动管理(尽管它的管理方式不同。在 C++ 中,它持续到超出范围,而在 C# 中,它持续到没有人引用它并且它被垃圾收集 - 但在这两种情况下,你不必做任何事情来确保它被销毁)。出于同样的原因,它通常也是创建对象实例的正确方法。

新 C++ 程序员最常犯的错误之一是使用 new 分配每个对象,存储指向它们的指针,然后尝试记住删除它们.一个更简单、更健壮和更有效的解决方案是避免 new 并尽可能避免指针。有时,您需要一个对象,其生命周期不限于声明范围(并且复制对象不是在该范围之外使用它的选项)。然后您使用 new,并且很可能将结果指针包装在某种类型的智能指针中。

关于C#对象和C++对象,区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742657/

相关文章:

c# - 创建一个非常简单的单循环列表 C#

c# - 如何更新 ASP.NET Identity 中的声明?

c++ - 测量使用预编译库(C++、Linux)的程序的总 CPU 时间

c++ - 安装 Visual Studio 2015 时出现错误,有关 "Microsoft Visual C++ 2015 Redistributable"

c++ - 将私有(private)复制构造函数与公共(public)赋值运算符一起使用时出错

c++ - 在像 ostream& 运算符 <<(...) 这样的类名之后使用的 & 符号是什么?

c++ - 动态指针和对象

c# - 具有任意缩放中心的 XNA 2d 相机

c 结构体被传递到函数中

c# - 'string' 不包含 'Contains' 的定义