新对象变体

| 这是一个非常新手的问题,但对我来说却是全新的问题。在我的代码中,以及我以前见过的所有地方,都这样创建了新对象...
MyClass x = new MyClass(factory);
但是,我只是看到了一些看起来像这样的示例代码...
MyClass x(factory);
这样做是一样的吗?     
已邀请:
        一点也不。 第一个示例使用动态内存分配,即您要在堆(而不是堆栈)上分配
MyClass
的实例。您将需要手动在该指针上调用
delete
,否则将导致内存泄漏。同样,“ 4”返回一个指针,而不是对象本身,因此您的代码将无法编译。它需要更改为:
MyClass* x = new MyClass(factory);
第二个示例在堆栈上分配了一个实例“ 2”。这对于短暂的对象非常有用,因为当离开当前作用域时,它们将被自动清理(并且速度很快;清理堆栈仅涉及增加或减少指针)。 这也是您实现“资源获取为初始化”模式(通常称为RAII)的方式。您类型的析构函数将清除所有动态分配的内存,因此,当堆栈分配的变量超出范围时,将为您清除所有动态分配的内存,而无需对
delete
进行任何外部调用。     
        否。使用
new
时,将在堆上创建对象,然后必须将其删除。另外,您真的需要
MyClass*
。另一种形式是在堆栈上创建一个对象,该对象将在作用域结束时自动销毁。     

要回复问题请先登录注册