std :: vector(T *データなどが指す)に含まれるデータの所有権を別の構造に移し、ベクトルが範囲外になった後にぶら下がっているポインタになりますか?ベクトルが有効範囲外になったときにデータが解放されないようにする
編集:私はデータをコピーしたくありません(これは簡単ですが効果的ではありません)。これをエミュレートするために私の心に来るだけの事はある
template<typename T>
T* transfer_ownership(vector<T>&v){
T*data=&v[0];
v.clear();
...//<--I'd like to make v's capacity 0 without freeing data
}
int main(){
T*data=NULL;
{
vector<double>v;
...//grow v dynamically
data=transfer_ownership<double>(v);
}
...//do something useful with data (user responsible for freeing it later)
// for example mxSetData(mxArray*A,double*data) from matlab's C interface
}
:
{
vector<double>*v=new vector<double>();
//grow *v...
data=(*v)[0];
}
し、データが後でどちらか解放されます
具体的には、私のような何かをしたいのですがまたは(私の場合は)mxSetData(mxArray A、doubleデータ)として使用されます。しかし、これは小さなメモリリーク(vの容量、サイズなどを処理するためのデータ構造体ですが、もちろんデータそのものではありません)をもたらします。
漏れなく可能ですか?
これはかなり混乱しています。また、C++フォーラムで質問してみてください。 – Nzbuu
mxSetDataとmxArrayは、(C mexファイルを使用して)matlab Cインタフェースの一部です。 – spirov
はい、本当にMatlab *の質問ではありません。* C++を知らない限り、Matlabがあなたを助けるためにここに来ていることを知っている人は何も寄付することができません。 – quark