3
#include <iostream>
#include <fstream>
#include <cstdio>
    using namespace std;

class Derived
{

public:
    Derived()
    {
        cout<< "Initialize...\n";
    }
    ~Derived()
    {
        cout<< "Finalize...\n";
    }

};
static Derived *obj=new Derived();
int main()
{
    cout<<"Main Started::\n";

}

出力を次のように取得しようとしています:

しかし、取得: MainStartedを初期化します

デバッグしようとしましたが、デストラクタに入りません。だから私はこの問題を解決できません。

4

4 に答える 4

0

派生オブジェクトをポインターにしないでください。C++ は Java ではないため、この場合はほとんど必要ありませんnew。ただし、ヒープ上にを作成する場合Derivedは、RAII、つまりスマート ポインターを使用して、適切に破棄されるようにする必要があります。コードにメモリ リークがあり、デストラクタが*obj呼び出されません。
正しい方法の例:

static Derived obj; //non-heap version

//C++03 auto_ptr, now deprecated:
static std::auto_ptr<Derived> obj(new Derived());

//C++11 smart pointers:
static std::unique_ptr<Derived> obj(new Derived());
static auto obj = std::make_shared<Derived>();

//Boost smart pointers, C++03 compatible:
static boost::shared_ptr<Derived> obj = boost::make_shared<Derived>();
static boost::scoped_ptr<Derived> obj(new Derived());

1つ(できれば最初のもの)を選んでください。

編集:しかし、これらのいずれかを行う前に、そのグローバル変数を使用する本当に正当な理由を与える必要があります.

于 2013-04-19T11:35:16.450 に答える