-1

私は自分のクラスと std::vector でいくつかの作業をしようとしています。次の問題に遭遇しました=

これが私のコードです:

class A
{
    private:
        ........
    public:
        vector<int>* ret_vec();
};

vector<int>* A::ret_vec()
{
    vector<int> vec;         // vec is declared as a local variable
    ......
    return &vec;
}

int main()
{
    .....
    vector<int>* vec = A.ret_vec();       // size of vec is 0 !!!
}

コードでわかるように、vecinvector<int>* A::ret_vec()はローカル変数として宣言されており、in のポインターに代入するとmain、のサイズvecは 0 になります。

したがって、代わりに次の方法を使用しました。

class A
{
    private:
        vector<int> vec;         // vec is declared as a member variable
    public:
        vector<int>* ret_vec();
};

vector<int>* A::ret_vec()
{
    ......
    return &vec;
}

int main()
{
    .....
    vector<int>* vec = A.ret_vec();       // size of vec is ok
}

vecこれで、メンバー変数として宣言したので、 でローカル ポインターに代入するとmain、そのサイズは予想どおりになりました。

これはなぜですか?どうもありがとう。

================================================== ======== 編集:

最初に自分自身を明確に説明しておらず、申し訳ありません。私は大規模なデータセットを扱ってvecおり、時間のパフォーマンスが現在の優先事項です。したがって、値による戻りベクトルはオプションではないのではないかと心配しています。

4

2 に答える 2

7

ダングリング ポインターが返され、未定義の動作が発生します。ポインターをローカル自動変数に返すことは正しくありません。

于 2013-08-27T09:34:38.183 に答える
0

関数呼び出し後に削除されるローカル変数へのポインターを返します。したがって、ポインターを返すことはお勧めできません。オブジェクトを返すだけです。

于 2013-08-27T09:54:59.497 に答える