8 c++
尝试创建指向对象的共享指针时遇到此错误
#include <iostream>
#include <vector>
class Foo {
public:
std::shared_ptr<Foo> getFoo(int i) {
auto foo = std::make_shared<Foo>(i);
//auto foo = std::shared_ptr<Foo>(new Foo(i)); "works"
return foo;
}
protected:
Foo(int i) {std::cout << "foo" << std::endl; }
};
int main(int argc, const char * argv[]) {
}
Run Code Online (Sandbox Code Playgroud)
我收到构建时错误
Static_assert failed due to requirement 'is_constructible<Foo, int &>::value' "Can't construct object in make_shared"
Run Code Online (Sandbox Code Playgroud)
我可以通过将构造函数设为私有来避免这种情况,但我想知道为什么 make_shared 失败并且 shared_ptr(new) 有效?
//auto foo = std::shared_ptr<Foo>(new Foo(i)); "works"
Run Code Online (Sandbox Code Playgroud)
在这里,您Foo从内部访问的构造函数Foo,然后将此指针传递给std::shared_ptr,这很好。
auto foo = std::make_shared<Foo>(i);
Run Code Online (Sandbox Code Playgroud)
Herestd::make_shared尝试访问Foo的构造函数,这是protected不允许的。
| 归档时间: |
|
| 查看次数: |
5865 次 |
| 最近记录: |