NDKを使用してAndroidコンソールプログラムをコンパイルしているときに、最近奇妙な問題が発生しました。グローバル変数のC++デストラクタはいつNDKで呼び出されますか?
クラスはこのように宣言されています
class ClassP
{
public:
~ClassP()
int number;
}
ClassP::~ClassP()
{
printf("number=%d", number);
}
主な機能は、このようなものです:
// global variable
ClassP p_instance;
int main()
{
printf("test");
}
プログラムが実行されると、それはいくつかの後に出力
test
Segmentation fault
ます基本的なデバッグでは、ClassPのデストラクタを呼び出すと、そのメンバ変数のアドレス私が思うのは、デストラクタが呼び出される前にp_instanceが解放されたからです。しかし、その行動は私が期待したものではありません。プロセスが終了してシステムがすべてのオブジェクトを解放しようとしているときに、グローバル変数のデストラクタが呼び出されていませんか?
これは、 'C++、使用することですcout'、 'printf'の代わりに' return 0; 'を' main'の中で 'default'コンストラクタで' number'を初期化して、もう一度やり直してください。私はNDKとアンドロイドに精通していませんが、まだC++です –
@KirilKirov printfに何も問題はありません。 coutの問題は、オブジェクトの前に解体されている可能性のあるオブジェクトに依存していることです。 – Pubby
GCCの 'constructor'と' destructor'関数属性を使ってみましたか?あなたのクラスがうまく動作しない場合、おそらくそれらのことが起こります。 – Pubby