具體而言,我不知道爲什麼這個編譯:爲什麼我可以使用make_unique創建具有衰減數組指針的unique_ptr?
#include <memory>
#include "make_unique.hpp"
void foo(const char *s){
std::unique_ptr<const char*>ptr = std::make_unique<const char*>(s);
}
,這並不:
#include <memory>
#include "make_unique.hpp"
void foo(const char *s){
std::unique_ptr<const char*>ptr(s);
}
似乎是工作,當我把它寫像make_unique實現:
#include <memory>
#include "make_unique.hpp"
#include <iostream>
std::unique_ptr<const char*> foo(const char *s){
/* return std::make_unique<const char*>(s); */
return std::unique_ptr<const char*>(new decltype(s)(std::forward<decltype(s)>(s)));
}
int main(){
const char * s = "bar";
std::unique_ptr<const char*>ptr = foo(s);
std::cout<<*ptr;
}
編輯*錯誤(截斷)
error: no matching conversion for functional-style cast from 'const char *' to 'std::unique_ptr<const char *>'
return std::unique_ptr<const char*>(s);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/bits/unique_ptr.h:169:7: note: candidate constructor not viable: no known
conversion from 'const char *' to 'pointer' (aka 'const char **') for 1st argument; take the address of the argument with &
unique_ptr(pointer __p) noexcept
^
這將是有益的,如果你能告訴我們你得到實際的錯誤,因爲這可能解釋了「爲什麼」。 –
我認爲你正在指定一個無意間的額外間接級別。 '標準::的unique_ptr'是一個包裝'X *'不是'X' –
JSF