2
추상적 유형에 shared_ptr
대신 make_shared
을 사용할 수 있습니까?make_shared 및 추상 다형성
예 :
int main()
{
std::vector<std::shared_ptr<Foo>> vec;
vec.push_back(std::static_pointer_cast<Foo>(std::make_shared<Bar>()));
}
그러나 그것은 또한 그것없이 작동합니다 :
vec.push_back(std::make_shared<Bar>());
이 여기 명시 적 캐스트를 언급 할하려면
#include <memory>
#include <vector>
class Foo
{
public:
virtual void fooFunc() = 0;
};
class Bar : public Foo
{
public:
void fooFunc() {};
};
int main()
{
std::vector< std::shared_ptr<Foo> > vec;
vec.push_back(std::shared_ptr<Foo>(new Bar()));
//vec.push_back(std::make_shared<Foo>(new Bar())); //doesn't work because Foo is abstract
return 0;
}
'make_shared'와'new'는 어쨌든 완전히 잘못되었습니다 -'make_shared'는 이미 객체를위한 저장 공간을 할당합니다. – Xeo