LinuxÒÁµéÔ°ÂÛ̳'s Archiver

palzhou ·¢±íÓÚ 2004-8-15 20:52

boost::any ÔÚ¿çÄ£¿éʹÓÃʱ£¬ÄѵÀÓÐBUG£¿

boost::any ÔÚ¿çÄ£¿éʹÓÃʱ£¬ÄѵÀÓÐBUG£¿

ÔÚÎÒµÄÒ»¸öDLLÀÓÐÒ»¸öÀàÈçÏ£º
class MyClass
{
   ...
   boost::any m_var;
}
ÔÚDLL±»×°ÔصÄʱºò»ánew Ò»¸öMyClass(±ÈÈçpMyClass), Ð¶ÔØDLLʱ»á delete µôËü¡£

ÁíÍâDLLÓÐÒ»¸ö½Ó¿Ú£¬ÈçÏ£º
void SetVar(boost::any & anyValue)
{
    pMyClass->m_var = anyValue;
}

ÔËÐÐЧ¹û£º
µ±³ÌÐòÍ˳ö£¬Ð¶ÔØDLL£¬delete pMyClassʱ»á³ö´í¡£´íÎóµÄµØµãÊÇboost::anyµÄÎö¹¹º¯Êý£¬ÈçÏ£º
...
class any
{
   ...
   ~any()
    {
        delete content;   // ³ö´í£¬0xC0000005´íÎó¡£
    }
   ...
}
...


ÎÒʹÓÃanyʱ£¬Ã»Ê¹ÓÃÈÎÎñÖ¸Õ룬ËùÒÔBOOSTÓ¦¸ÃÒªÎÒÃDZ£Ö¤²»»á³öÏÖÎÊÌâ¡£µ«È´»á³öÈËÒâÁϵÄÔÚBOOSTÄڵĴúÂëÀï³öÏÖ´íÎó£¬ÕæÊDz»Ã÷°×¡£´ó¼ÒÓÐûÓÐÓöµ½ÕâÖÖÇé¿öµÄ£¿

ÎҵĻ·¾³£º
windows 2000 pro sp4
vc6 sp5
boost 1.31

gyb997 ·¢±íÓÚ 2005-1-20 11:35

boostÊÇûÓÐ벡µÄ£¬¹Ø¼üÊÇwindowsÄÚ²¿µÄ벡¡£ÒòΪdllºÍexe¶¼ÊÇwindowsÄÚ²¿µÄmodule£¬Ä¬ÈÏÊÇÒ»¸ömodule¶ÔÓ¦Ò»¸öheap£¨ÄÚ´æ¶Ñ£©¡£
¿´
void SetVar(boost::any & anyValue)
{
pMyClass->m_var = anyValue;
}
anyµÄ operator=ÀïÃæÓÐnew²Ù×÷£¬¿´£¬Óõ½ÁËheapÁË
µ«ÊÇÔÚÎö¹¹µÄʱºòÊÇÔÚdllµÄheapÀïÃæ£¬ÄÇÖ¸Õë²»³ö벡²Å¹ÖÄÇ

gyb997 ·¢±íÓÚ 2005-3-16 14:07

½â¾ö°ì·¨

¿ÉÒÔÖØÔØclass holderµÄ new ºÍdelete ²Ù×÷·û£¬ÈÃËûÖ´Ðе½Í³Ò»µÄ¶ÑÀïÃæ¡£

void* operator new(size_t sz)
   {
       return ::HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sz);
   }
   void operator delete (void* pz,size_t sz)
   {
     ::HeapFree(GetProcessHeap(),HEAP_ZERO_MEMORY,pz);
   }

µ±È»£¬ÄãÒ²¿ÉÒÔ×Ô¼ºÐ´Ò»¸ömemory pool»òÕßÓÃboost×Ô¼ºµÄ¡£

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.