C+的RAII教程+; 我想学习如何在C++中使用RAII。我想我知道它是什么,但不知道如何在我的程序中实现它。快速的谷歌搜索并没有显示任何好的教程

C+的RAII教程+; 我想学习如何在C++中使用RAII。我想我知道它是什么,但不知道如何在我的程序中实现它。快速的谷歌搜索并没有显示任何好的教程,c++,raii,C++,Raii,有没有人有什么好的链接教我RAII?解释还不错。我个人认为关于RAII主题最有帮助的参考资料是赫伯·萨特的书 萨特的《本周大师》文章涉及到了这本书中的许多主题。这些文章可以在。上找到,没有任何内容(也就是说,我认为您不需要完整的教程) RAII可以简单地解释为“每个需要清理的资源都应该交给对象的构造函数。” 换言之: 指针应该封装在智能指针类中(有关示例,请参阅std::auto_ptr、boost::shared_ptr和boost::scoped_ptr) 需要清理的句柄应该封装在类中,这些

有没有人有什么好的链接教我RAII?

解释还不错。

我个人认为关于RAII主题最有帮助的参考资料是赫伯·萨特的书

萨特的《本周大师》文章涉及到了这本书中的许多主题。这些文章可以在。

上找到,没有任何内容(也就是说,我认为您不需要完整的教程)

RAII可以简单地解释为“每个需要清理的资源都应该交给对象的构造函数。”

换言之:

指针应该封装在智能指针类中(有关示例,请参阅std::auto_ptr、boost::shared_ptr和boost::scoped_ptr)

需要清理的句柄应该封装在类中,这些类在销毁时自动释放句柄

同步应该依赖于在作用域退出时释放互斥/同步原语(有关示例,请参阅boost::mutex::scoped_lock用法)

我不认为你真的可以有一个关于RAII的教程(就像你可以有一个关于设计模式的教程一样)。RAII更像是一种看待资源的方式,而不是其他任何东西

例如,目前我正在使用WinAPI编码,我编写了以下类:

template<typename H, BOOL _stdcall CloseFunction(H)>
class checked_handle
{
public:
    typedef checked_handle<H,CloseFunction> MyType;
    typedef typename H HandleType;

    static const HandleType     NoValue;

    checked_handle(const HandleType value)
        : _value(value)
    {
    }

    ~checked_handle()
    {
        Close();
    }

    HandleType* operator &()
    {
        return &_value;
    }

    operator HandleType()
    {
        return _value;
    }

private:
    HandleType      _value;

    void Close(const HandleType newValue = NoValue)
    {
        CloseFunction(_value);
        _value = newValue;
    }
};

template<typename H,BOOL _stdcall CloseFunction(H)>
const typename checked_handle<H,CloseFunction>::HandleType 
    checked_handle<H,CloseFunction>::NoValue = 
    checked_handle<H,CloseFunction>::HandleType(INVALID_HANDLE_VALUE);

typedef checked_handle<HANDLE,::CloseHandle> CheckedHandle;
typedef checked_handle<HWINSTA,::CloseWindowStation> WinStationHandle;
typedef checked_handle<HDESK,::CloseDesktop> DesktopHandle;
typedef checked_handle<HDEVNOTIFY,::UnregisterDeviceNotification> DevNotifyHandle;
typedef checked_handle<HWND,::DestroyWindow> WindowHandle;

BOOL __stdcall CloseKey(HKEY hKey);
typedef checked_handle<HKEY,CloseKey> RegHandle;

此成员已分配,但我从不明确地调用
::CloseWindow(\u window.\u handle)
(当
某物的实例超出范围时(如
某物::~Something
->
WindowHandle::WindowHandle
->
:Close(\u window.\u value)
).

的第13项也非常有用

不是一个外部链接,但你可以在这里找到一些很好的答案:@Naveen-谢谢,当我键入我的title@Joe布洛格斯:我使用谷歌和StasOffFuff.com网站。它产生了更好的结果。你用的C++教科书不包括这个?乔,我在那里。这是你的问题。你不能从在线资源中学习C++,你需要至少读一个(实际上是几个)。我推荐加速C++,但是你可以在别人那里获得意见,RAII是基本的东西,不是高级的。这也可以用<代码> Boo::SyddypTr>代码>使用自定义的分配器。例如,代码> Boo:::SyrdypTr.CukKdDHAL句柄(OpenXONHORAND HOLLY),Booo::BIN < VUL> >((:::CouthHead,1))
这一点很好,但我至少会用一些类型定义来写。我不太喜欢使用名为“shared_ptr”的类来表示指针以外的内容。这会导致维护过程中出现混乱。从某种意义上说,句柄就是指针。它是使用原始数据类型表示某些资源的表示(也就是说,它指向一个使用整数的资源)。例外C++的哪个章节涵盖了RAII的主题?
class Something
{
public:
    // ...
private:
    WindowHandle        _window;
};