2

メソッドを提供するストリームオブジェクトがGetBuffer()ありGetBufferSize()ます。GetBufferメソッドは生のポインターを返しますuint8_t。このバッファを (値で) を期待する別のオブジェクトに渡したいですshared_array<uint8_t>。私はブーストを使用しています(これはかなり新しいものです)。これが私が思いついたものです。

// relevant protos for a and b
void BClass::SetData(shared_array<uint8_t> data, size_t data_len);
uint8_t* AClass::GetBuffer(void);
size_t AClass::GetBufferSize(void);

AClass a;
BClass b;

shared_array<uint8_t> data = shared_array<uint8_t>(new uint8_t[a.GetBufferSize()]);
memcpy(data.get(), a.GetBuffer(), a.GetBufferSize());
b.SetData(data, a.GetBufferSize());

これをクリーンアップできるboostのmake_sharedに似たものがあるべきだと感じています。明らかな何かが欠けていますか?

4

1 に答える 1

0

ではarraysBoost 1.53 make_sharedあります。したがって、コードは次のようになります。

shared_ptr<uint8_t[]> data = make_shared<uint8_t[]>(a.GetBufferSize());

もちろん、代わりにBClass::SetData受け入れるために、署名を変更する必要があります。shared_ptrshared_array

于 2013-04-03T06:40:22.223 に答える