Pro*_*yon 1 c++ conventions delete-operator
我有另一个理论问题,因为标题建议它是评估代码的构建.基本上我在考虑到处使用这个模板.
我使用的是VC++ VS2008(包括所有内容)
Stapel.h
class Stapel
{
public:
//local vars
int x;
private:
public:
Stapel();
Stapel(int value);
~Stapel(){}
//getters setters
void set_x(int value)
{
x = value;
}
int get_x(int value)
{
x = value;
}
void CleanUp();
private:
};
Run Code Online (Sandbox Code Playgroud)
Stapel.cpp
#include "Stapel.h"
Stapel::Stapel()
{
}
Stapel::Stapel(int value)
{
set_x(value);
}
void Stapel::CleanUp()
{
//CleanUpCalls
}
Run Code Online (Sandbox Code Playgroud)
这里的重点是清理方法,基本上我想把这个方法放在我所有的文件中,只需要让它在需要时进行删除调用,以确保它在一个地方,我可以防止删除周围的飞行,作为一个新秀,即使我知道可能不是你想乱搞的东西,也不是一个草率的堆.
这个版本怎么样?
好坏 ?为什么?
那么使用析构函数来完成这些任务呢?
Boost为RAII风格的堆管理提供了几个实用程序:
您的提案的缺点:
CleanUp-method中为每个堆分配放置一个删除.如果您的程序具有任何类型的非线性控制流(某些分配可能仅在某些情况下发生),则跟踪这些分配可能非常困难.通过将资源的释放(在本例中为内存)绑定到堆栈上对象的生命周期,您不必担心这么多.你仍然需要考虑循环引用之类的东西.编辑:开始实施的一个好方法是获得Boost.然后在代码中搜索原始指针,并尝试替换每个指针
如果这样做,您的代码不应再包含任何deletes.如果你使用make_shared,你甚至可以消除所有news.如果你遇到任何你自己无法解决的问题,请查看stackoverflow.com ...哦等等,你知道那个已经;)
请改用智能指针和RAII.这不会将所有deletes集中在一个地方,而是从代码中删除它们.如果您需要自己执行任何清理,这就是析构函数的用法,请使用它们,因为这是C++中的约定.