unique_ptr到char *转换

时间:2016-06-17 07:38:38

标签: c++ pointers unique-ptr

我曾经用新的

在我的C ++项目中分配内存
char* buffer = new char [size];
...
delete[] buffer;

我真的想继续前进并使用unique_ptr,就像这样

unique_ptr<char[]>buffer(new char[size]);

然后我使用istream& get (char* s, streamsize n);char*作为第一个参数,所以我该怎么办?我试过投射类型,但失败了。我也知道我可以用vector<char>而不是指针,但我真的不喜欢用它。谢谢!

3 个答案:

答案 0 :(得分:8)

std::unique_ptr有一个名为get()的方法来访问底层指针:使用它。

unique_ptr<char[]> buffer(new char[size]);
...
myIstream.get(buffer.get(), n);

答案 1 :(得分:1)

数组有std::unique_ptr<T[]>个特化。在Smeehey的回答中,如何在你的案例中使用它。

但是,从Scott Meyer&#34;有效的现代C ++&#34;项目18(强调我的):

  

数组的std :: unique_ptr的存在应该只是你的智力兴趣,因为 std :: array,std :: vector和std :: string几乎总是比原始数组更好的数据结构选择

因此,请使用为此目的而制作的类,而不是使用std::unique_ptr进行攻击。

答案 2 :(得分:0)

其中一种方法是使用vector而非unique_ptr,但使用unique_ptr会带来好处。
我之前也遇到了同样的问题,我使用unique_ptr分配了一个缓冲区,并将其作为参数传递给read函数。摆脱这种情况的唯一方法是使用get()方法将unique_ptr转换为char*。 另外,请确保您#include <memory>以避免我遇到的其他错误。

谢谢!