7

私はRAIIクラスを持っています:


 template<typename T>
    class RAII
    {
    public:
    explicit RAII( T* p = 0 ): p_(p){}

    ~RAII() {delete p_;}

    T& operator*() const { return p_;} 
    T* operator‐&gt;() const{ return p_;}
    };

{

RAII<std::vector<int>> r(new std::vector<int>());
std::cout<<r­‐&gt;size()<<std::endl;

} // The std::vector<int> is automatically deallocated

スコープを使い果たすと、デストラクタが呼び出されることを知っています。~RAII() {delete P_};

私の質問は:

デストラクタはどのように呼び出されますか?

4

2 に答える 2

4

コンパイラは、ローカル変数のデストラクタを呼び出すコードを自動的に生成します。*


* 技術的には、「自動保存期間を持つオブジェクト」として知られています。その理由が明らかになるはずです!

于 2013-01-09T02:25:16.230 に答える