gpt4 book ai didi

c++ - 在 C++ 中何时使用 "new"何时不使用?

转载 作者:IT老高 更新时间:2023-10-28 11:56:05 26 4
gpt4 key购买 nike

Possible Duplicate:
When should I use the new keyword in C++?

什么时候应该在 C++ 中使用“new”运算符?我来自 C#/Java 背景,实例化对象让我感到困惑。

如果我创建了一个名为“Point”的简单类,那么在创建点时我应该:

Point p1 = Point(0,0);

Point* p1 = new Point(0, 0);

谁能帮我澄清一下什么时候使用 new 运算符,什么时候不使用?

重复:

When should I use the new keyword in C++?

相关:

About constructors/destructors and new/delete operators in C++ for custom objects

Proper stack and heap usage in C++?

最佳答案

当你希望一个对象一直存在直到你delete它时,你应该使用new。如果你不使用 new 那么对象会在超出范围时被销毁。这方面的一些例子是:

void foo()
{
Point p = Point(0,0);
} // p is now destroyed.

for (...)
{
Point p = Point(0,0);
} // p is destroyed after each loop

有些人会说 new 的使用决定了你的对象是在堆上还是在栈上,但这仅适用于在函数中声明的变量。

在下面的示例中,'p' 的位置将是其包含对象 Foo 的分配位置。我更喜欢称之为“就地”分配。

class Foo
{

Point p;
}; // p will be automatically destroyed when foo is.

使用 new 分配(和释放)对象比就地分配要昂贵得多,因此应将其使用限制在必要的地方。

何时通过 new 进行分配的第二个例子是数组。您不能*在运行时更改就地数组或堆栈数组的大小,因此如果您需要一个大小未定的数组,则必须通过 new 分配它。

例如

void foo(int size)
{
Point* pointArray = new Point[size];
...
delete [] pointArray;
}

(*先发制人的挑剔 - 是的,有一些扩展允许可变大小的堆栈分配)。

关于c++ - 在 C++ 中何时使用 "new"何时不使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/679571/

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