我希望通过一个例子更好地理解如何使用我的类实现RAII习语:推荐的方法是什么,以确保指针在我的课程中正确免费()?
我有一个课程,应该在课程期间存在.本着RAII的精神,因为我需要将对这个类的引用传递给其他类,我将它保存在shared_ptr中(不确定它实际上需要保存在shared_ptr中,但为了好玩,它是).
在类ctor中,我使用2个缓冲区(指针),然后使用缓冲区然后free()'循环多次malloc().如果发生事故,dtor应包含故障安全代码以释放缓冲区.
dtor可以看到缓冲区的唯一方法是将它们声明为类变量,但它们仅用于类ctor.
例:
class Input
{
private:
PSOMETYPE buffer1;
public:
Input();
~Input();
}
Input::Input() : buffer1(NULL)
{
for(blahblah)
{
buffer1 = (PSOMETYPE)malloc(sizeof(SOMETYPE));
// Do work w/buffer1
if(buffer1 != NULL) { free(buffer1); buffer1 = NULL }
}
}
Input::~Input()
{
if(buffer1 != NULL) { free(buffer1); buffer1 = NULL }
}
Run Code Online (Sandbox Code Playgroud)
考虑到我只在ctor中使用缓冲区,将它声明为私有类变量是否有意义?如果我在ctor的范围内声明它,那么dtor将不知道它是什么来释放.
我知道这是一个简单的例子,老实说,我可以实现这个,因为很容易忘记使用智能指针来引用我的类并且有一个空白的dtor,就像我在循环中做的那样free()'.我没有导师或上学,而且我不确定何时应该遵循RAII成语.
我不想征求辩论.问题更多,"我可以使用ASP.NET Core 2 MVC + EF Core 2与Angular 5获得相同的结果,如果Angular 5可以实现,那么(高级别)怎么样?"
我对Angular 5了解不多,几个月前我才开始在ASP.NET Core中设计非常小的Web应用程序.
我的应用程序涉及:
- 关系数据库(约50个表,包括所有类型的关系),以及另一个专有数据库,并在两者上执行CRUD语句.
- 用户必须通过登录进行身份验证,并在应用程序中维护此身份验证.不同的登录权限会导致应用程序中出现不同的行为.
- 视图中涉及多个模型的数据(需要视图模型).
- 用户需要能够动态地向App添加控件,以便在一次操作中提交多个数据集(通过JavaScript).
- 在一个视图中,用户需要能够发回数据并从数据库接收响应,而无需刷新网页.基本上,他们在这个视图中的所有工作都可以在不重新加载网页的情况下完成(AJAX?).
- 至少在桌面上的用户需要在他们正在查看的数据发生变化时(通过另一个用户)从服务器接收更新(我相信AJAX).
- 应用程序应该在桌面浏览器上以一种方式工作,而在移动浏览器显示器上以另一种方式工作(Bootstrap?).
也许我对Angular 5背后的炒作感到不满,因为它承诺实现"丰富,流动的客户端Web应用程序".使用ASP.NET创建良好的客户端体验只是更多的工作吗?