close

class A{

public:
    A()
    {
        std::cout << "A" << std::endl;        
    }

    ~A()
    {
        std::cout << "~A" << std::endl;
    }

};

class B{

public:
    B()
    {
        std::cout << "B" << std::endl;        
    }

    ~B()
    {
        std::cout << "~B" << std::endl;
    }

};

int main()
{
    A a;
    B b;
}

問: 上述輸出為何?

答:
A
B
~B
~A


問: 應用場景
答: 機算機資源控管,稱為RAII範式

 

 

 

 

 

 

 

 

// 
// 沒C++ 可以寫 轉戰 C# 的工程師看這
//
class A : IDisposable
{
    public A()
    {
        Console.WriteLine("A()");
    }

    void Dispose()
    {
        Console.WriteLine("~A()");
    }
}

class B : IDisposable
{
    public B()
    {
        Console.WriteLine("B()");
    }

    void Dispose()
    {

        Console.WriteLine("~B()");

    }
}

static void Main(string[] args)
{
    using (var a = new A { })
    {
        using (var b = new B { })
        {
        }
    }
}

 

// 沒C++ 可以寫 轉戰 Java 的工程師看這, Java 8以上可用
// 但是很多專案還是用Java 6, Java 7 包含 Android
public class A implements AutoCloseable 
{
    public A()
    {
        System.out.println("A()");
    }


    @Override
    public void close() throws Exception 
    {
        System.out.println("~A()");
    }
}

public class B implements AutoCloseable 
{
    public B()
    {
        System.out.println("B()");
    }


    @Override
    public void close() throws Exception 
    {
        System.out.println("~B()");
    }
}

public static void main(String[] args)
{
    try (A a = new A() ) 
    {
        try (B b = new B() ) 
        {
        }
    }
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 gaussian1998 的頭像
    gaussian1998

    sean huang的部落格

    gaussian1998 發表在 痞客邦 留言(0) 人氣()