私はこの機能を見逃すことはできませんが、これは直接可能ではないと思います。 std::string
にはさらにconst
data
のメンバーがいません。うまくいけば、これはC++で変更されます17。
バッファを自分で割り当てる場合は解決策があります。前もってstd::vector
を使用してください。たとえば、次のCスタイルの関数があるとします。
extern void
fill_in_the_numbers(double * buffer, std::size_t count);
次に、次のことができます。また
std::vector<double>
get_the_numbers_1st(const std::size_t n)
{
auto numbers = std::vector<double> (n);
fill_in_the_numbers(numbers.data(), numbers.size());
return numbers;
}
、あなたはとても幸運ではないですし、あなたのCスタイルの関数はメモリ自体を割り当てるに主張した場合、
extern double *
allocate_the_buffer_and_fill_in_the_numbers(std::size_t n);
あなたは悲しげに劣っている、std::unique_ptr
に頼ることができます。
std::unique_ptr<double[], void (*)(void *)>
get_the_numbers_2nd(const std::size_t n)
{
return {
allocate_the_buffer_and_fill_in_the_numbers(n),
&std::free
};
}
はい、ただし、ベクターのサイズが変更され、ポインタが無効になる恐れがあります。ベクトルが決してサイズを変更せず、これを保証できる場合、あなたは安全です。 – user4581301
バッファを割り当てていますか?それでは、その代わりにベクトルをさせることができます。さもなければ、私はこれがどのように達成されるかを知らない。 – 5gon12eder
@ user4581301既存の配列の所有権をベクターに転送できますか?これは私にニュースです – vu1p3n0x