1

入力データとして、外部データへの参照を (コピーせずに) 使用するか、他の入力に基づいてデータ自体を作成するクラスがあります。私は参照を使用することを好み(データは行列であるため、逆参照を避けるため)、最終的に次の構造になりました(簡略化):

#include <iostream>
#include <vector>
using namespace std;
using VectI = vector<int>;

class A {
    VectI x0;
    VectI const & x = x0;
public:
    A(VectI const & extX) : x(extX) {}     // referencing existing external data
    A(int i) { x0.push_back(i); x0.push_back(i*i); }   // create from other data
    void show_x()
        { cout << "x ="; for (auto&& i : x) cout << " " << i; cout << endl; }
};

int main() {
    VectI myX = {1, 2, 3};
    A a(myX); a.show_x(); // a references myX
    A b(2); b.show_x();   // b creates its own data based on i=2
    return 0;
}

例は動作します:

x = 1 2 3
x = 2 4

しかし、このアプローチに潜在的な問題はありますか? 特に、 const vector 'legal' C++x0によって参照される変更を行っているという事実 ですか、それとも他のコンパイラが不満を言う可能性がありますか?x

また、最初のコンストラクターがデータのコピーを回避していると確信できますか?

4

1 に答える 1