gpt4 book ai didi

c++ - 新对象变化

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:40 24 4
gpt4 key购买 nike

这是一个非常新手的问题,但对我来说是全新的。在我的代码中,以及我以前见过的所有地方,新对象都是这样创建的...

MyClass x = new MyClass(factory);

但是,我只是看到了一些示例代码,看起来像这样......

MyClass x(factory);

这是否做同样的事情?

最佳答案

完全没有。

第一个示例使用动态内存分配,即,您在堆(与堆栈相对)上分配 MyClass 的实例。您将需要对该指针手动调用 delete,否则会导致内存泄漏。此外,operator new 返回一个指针,而不是对象本身,因此您的代码将无法编译。它需要更改为:

MyClass* x = new MyClass(factory);

第二个例子在栈上分配了一个 MyClass 的实例。这对于生命周期较短的对象非常有用,因为它们会在离开当前范围时自动清理(而且速度很快;清理堆栈只涉及递增或递减指针)。

这也是您实现 Resource Acquisition is Initialization pattern 的方式,通常称为 RAII。您的类型的析构函数会清理任何动态分配的内存,因此当堆栈分配的变量超出范围时,会为您清理任何动态分配的内存,而无需任何外部调用 delete

关于c++ - 新对象变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com