我曾经用新的
在我的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>
而不是指针,但我真的不喜欢用它。谢谢!
答案 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>
以避免我遇到的其他错误。
谢谢!