gpt4 book ai didi

c++ - 在循环中创建新的指针对象

转载 作者:太空宇宙 更新时间:2023-11-04 14:51:16 24 4
gpt4 key购买 nike

假设我做了这样的事情

for(int i = 0; i < 10; i++)
{
//create a pointer object using new
//use the object
}

在循环中使用指针对象后是否需要删除?我在想,如果我不删除它,它会继续创建一个新对象 10 次,然后对象就卡在那里,消耗资源。

最佳答案

是的,对于每个new,都需要相应的delete。 (还有一个 delete[] 用于每个 new[]。)

但是,C++ 方法是尽可能避免动态 存储,而是使用本地自动变量/strong>:

for(int i = 0; i < 10; ++i)
{
some_class object;
//use object
} // object gets destroyed here automatically

如果您需要动态分配该对象(我对此表示怀疑,但确实存在这种情况),那么使用智能指针。一个智能指针会为你执行delete,无论你以何种方式离开它所属的范围:

for(int i = 0; i < 10; ++i)
{
smart_ptr<some_class> object(new some_class());
//use object
} // object gets destroyed here automatically

当前标准只知道一个名为 std::auto_ptr 的智能指针,在这种情况下它可以满足您的需要。下一个标准将包含更多标准,其中一个是 std::auto_ptr 的替代品,名为 std::unique_ptr,另一个是具有共享所有权语义的,名为 std::shared_ptr。您的编译器/标准库实际上可能已经支持它们。如果没有,您可以在 boost 的众多优秀图书馆中找到它们。 .


顺便说一句,请注意,我已将您的i++ 替换为++i。在 int 的情况下,这对您的场景没有任何影响,但 i++ 可能会为某些类型创建不必要的拷贝。 (如果您不关心效率,为什么要用 C++ 编程?)

关于c++ - 在循环中创建新的指针对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4219142/

24 4 0
文章推荐: java - 从 Maven 调用 groovy 'main' 方法
文章推荐: html - translateX 导致随机边框出现在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com