C++ 尝试创建共享\u ptr时,std::make_shared()中出现错误?
(使用VisualStudio2010)我试图在我的项目中创建一个现有类的共享\u ptr(这个类是在std::shared\u ptr存在之前十年编写的)。这个类接受指向另一个对象的非常量指针,它的空参数构造函数是私有的C++ 尝试创建共享\u ptr时,std::make_shared()中出现错误?,c++,c++11,shared-ptr,visual-c++-2010,make-shared,C++,C++11,Shared Ptr,Visual C++ 2010,Make Shared,(使用VisualStudio2010)我试图在我的项目中创建一个现有类的共享\u ptr(这个类是在std::shared\u ptr存在之前十年编写的)。这个类接受指向另一个对象的非常量指针,它的空参数构造函数是私有的 class Foobar { public: Foobar(Baz* rBaz); private: Foobar(); } 当我试图为它创建一个共享的ptr时,事情并不顺利: Baz* myBaz = new Baz(); std::shared_ptr
class Foobar {
public:
Foobar(Baz* rBaz);
private:
Foobar();
}
当我试图为它创建一个共享的ptr时,事情并不顺利:
Baz* myBaz = new Baz();
std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(new Foobar(myBaz));
出于某种原因,它似乎在调用Foobar
的复制构造函数,而不是采用Baz*
的构造函数
我也不确定是否无法从'Foobar*'转换为'const Foobar'
部分。我最好的解释是我的shared\u ptr
模板类型是错误的。我将其设置为shared\u ptr
,但这似乎是错误的,我看到的所有示例都没有将该类型设置为原始指针
使所有shared\u ptr
都能正确编译,但是当所有shared\u ptr
都超出范围时,这会阻止Foobar
对象被正确删除吗
编辑:这似乎相关,但我没有使用Boost:
Edit2:为清楚起见,如果您想知道我为什么要使用make_shared()
,在我的实际代码中,sharedFoo
变量是第三个类的类成员(独立于Foobar
和Baz
)。这应该是
std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(myBaz);
std::shared_ptr sharedFoo=std::make_shared(myBaz);
…因为make_shared通过运行构造函数为您构造实际对象。我无法测试atm,但这不应该;std::shared_ptr sharedFoo=std::make_shared(myBaz);啊!!这就成功了。。。显然
make_shared()
为您调用模板类型的构造函数,所以我不应该传入新的对象。谢谢再说一遍作为答案,我会将其标记为正确。完成后,我可以自己测试:)
std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(myBaz);