gpt4 book ai didi

c++ - 如果我在 C++ 的方法中创建对象,当函数返回时它们会自动销毁,还是会继续占用内存?

转载 作者:行者123 更新时间:2023-11-30 00:48:59 24 4
gpt4 key购买 nike

void Player::draw(sf::RenderTarget& target, sf::RenderStates states) const
{

sf::CircleShape c0;
c0.setFillColor(sf::Color::Red);
c0.setPointCount(4);
c0.setRadius(1);
c0.setPosition(sf::Vector2f(point[0].x, point[0].y));

sf::CircleShape c1;
c1.setFillColor(sf::Color::Red);
c1.setPointCount(4);
c1.setRadius(1);
c1.setPosition(sf::Vector2f(point[1].x, point[1].y));

target.draw(c0);
target.draw(c1);
}

我正在学习 C++。如您所见,我正在 draw 方法中制作 CircleShape 对象,该方法每秒运行 60 次。我在网上看到 C++ 中的对象存储在堆内存中,因此需要手动释放。当 draw 方法返回时,对象 c0 和 c1 是否被销毁并释放内存,还是它们会继续占用堆内存?

最佳答案

当你在栈上声明变量时,它们的析构函数将在它们超出范围时被调用

{
int a = 5;
}
// a is now out of scope, it's destructor was called

如果你从堆中分配内存,你将不得不竭尽全力清理内存

{
int* a = new int(5);
}
// a was just leaked, unless you had a pointer to it later

你必须像这样清理它

{
int* a = new int(5);
delete a;
}

从 C++11 开始,我强烈建议使用 <memory>如果您需要堆分配内存,但仍需要 RAII 清理。

#include <memory>
{
std::unique_ptr<int> a = std::make_unique<int>(5);
}
// a falls out of scope, the unique_ptr ensures the memory is cleaned up

关于c++ - 如果我在 C++ 的方法中创建对象,当函数返回时它们会自动销毁,还是会继续占用内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30170647/

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