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

Dar*_*ren 0 c++ pointers new-operator delete-operator

说我做这样的事情

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

在循环中使用它之后是否需要删除指针对象?我当时想,如果我没有删除它,它将继续创建一个新对象10次,然后对象就会挂在那里,吃掉资源.

sbi*_*sbi 5

是的,每一个都new需要有相应的delete.(并delete[]为每一个new[].)

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

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

如果你需要动态分配该对象(我怀疑,但有这种情况),然后使用智能指针.delete无论你将它所属的范围留在哪个方向,智能指针都会为你执行:

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

当前标准只知道一个名为的智能指针,std::auto_ptr在这种情况下,它会做你需要的.下一个标准将带来更多标准,其中包括替换std::auto_ptr,命名std::unique_ptr和一个具有共享所有权语义的名称std::shared_ptr.您的编译器/ std lib实际上可能已经支持它们.如果没有,你可以找到他们在被发现的许多伟大的图书馆之间增强.


顺便说一句,请注意我已经更换了你i++++i.如果int这种情况在您的方案中没有任何区别,但有些类型i++可能会创建不必要的副本.(如果效率不关心你,为什么用C++编程?)