これは、Qtの「暗黙の共有」の概念と並置されています。
http://doc.qt.io/archives/qt-4.7/implicit-sharing.html
データのQVectorをQtのパラメーターとして値で渡しても、メモリはすぐにはコピーされません。ベクトルの1つが変更された場合にのみ、コピーが作成されます。
setSamplesの場合の「明示的な共有」というドキュメントは、値ではなく参照によってQVectorを渡しているという事実に注意を引くためだけのものだと思います。
void QwtPlotCurve::setSamples(
const QVector< double > &xData,
const QVector< double > &yData
)
また、ベクトル内のデータを変更(または解放)すると、プロット曲線によって保持されるデータに影響を与えるように、これを行ったと思います。ベクトルが値で渡されたと思った場合、それは期待できません(コールサイトを読んでいるだけかどうかはわかりません)。
ただし、ソースコードを見ると、内部では、とにかく暗黙的に共有されたコピーを作成しているように見えます。qwt_plot_curve.cppには、次のものがあります。
/*!
\brief Initialize data with x- and y-arrays (explicitly shared)
\param xData x data
\param yData y data
\sa QwtPointArrayData
*/
void QwtPlotCurve::setSamples( const QVector<double> &xData,
const QVector<double> &yData )
{
setData( new QwtPointArrayData( xData, yData ) );
}
QwtPointArrayDataがqwt_point_data.hで次のように宣言されていることがわかります。
class QWT_EXPORT QwtPointArrayData: public QwtSeriesData<QPointF>
{
public:
QwtPointArrayData( const QVector<double> &x, const QVector<double> &y );
QwtPointArrayData( const double *x, const double *y, size_t size );
virtual QRectF boundingRect() const;
virtual size_t size() const;
virtual QPointF sample( size_t i ) const;
const QVector<double> &xData() const;
const QVector<double> &yData() const;
private:
QVector<double> d_x;
QVector<double> d_y;
};
qwt_point_data.cppのコンストラクターのコードは、d_x
とへの単純な割り当てd_y
です。これは、単純な古い暗黙の共有に戻ります。したがって、渡したデータに加えた変更は、プロットには表示されません。そのような変更時に作成されたコピーの料金を支払う必要があります。
彼らがこれをやろうとしていたのなら、なぜ彼らが(値だけでなく)const参照を渡すのをわざわざしたのかは私には謎です。ここで行われている唯一の「共有」は暗黙的であるように思われるので、「明示的に共有された」コメントが何を意味するのかわかりません。