C++ boost::在修改的工厂方法中共享\u ptr

C++ boost::在修改的工厂方法中共享\u ptr,c++,shared-ptr,C++,Shared Ptr,我有一个基于网络(TCP-IP)的定制IPC系统 考虑代码(以及下面的解释): #包括“boost/shared#ptr.hpp” #包括 使用名称空间std; 类命令{ 公众: typedef boost::shared_ptr ptr; 命令(){ cout发现了问题 在代码的调用部分,有一个共享的ptr以错误的方式被“复制”。 由此产生的错误是这样的: boost::shared_ptr<DerivedType> ptr1(new DerivedType(...)); boos

我有一个基于网络(TCP-IP)的定制IPC系统

考虑代码(以及下面的解释):

#包括“boost/shared#ptr.hpp”
#包括
使用名称空间std;
类命令{
公众:
typedef boost::shared_ptr ptr;
命令(){
cout发现了问题

在代码的调用部分,有一个共享的ptr以错误的方式被“复制”。 由此产生的错误是这样的:

boost::shared_ptr<DerivedType> ptr1(new DerivedType(...));
boost::shared_ptr<BaseType> ptr2(ptr1.get());
boost::shared_ptr ptr1(新的DerivedType(…);
boost::sharedptrptr2(ptr1.get());
当然,这将导致一个复制的自由和程序崩溃

代码并没有那么愚蠢,但最终还是简化了错误场景。 尽管如此,这只是一个小错误


谢谢大家的帮助。

你说的伪命令是什么意思?它支持get()?伪命令只是一个共享的\u ptr,其中包含一个空指针(我不确定是否允许)。我在调用者函数中将其创建为dummy。请检查此项。您认为这是错误的吗?您可以尝试在调试器中运行它,然后向我们提供发生的确切错误消息吗?您也可以尝试在valgrind中运行它。get是boost::shared_ptr get方法。它将只返回托管的原始指针。我使用了valgrind并报告了它双重免费。
==31859== Thread 2:
==31859== Invalid read of size 4
==31859==    at 0x805D7B0: boost::detail::sp_counted_impl_p<TVideoGetSourceSizeCommand>::dispose() (checked_delete.hpp:34)
==31859==    by 0x407FF42: Server::receiveFromNetwork() (sp_counted_base_gcc_x86.hpp:145)
==31859==    by 0x40800AF: Server::serverThread(void*) (Server.cpp:107)
==31859==    by 0x434496D: start_thread (pthread_create.c:300)
==31859==    by 0x42B398D: clone (clone.S:130)
boost::shared_ptr<DerivedType> ptr1(new DerivedType(...));
boost::shared_ptr<BaseType> ptr2(ptr1.get());