2013-12-10 5 views
1

의 샘플 코드를 구현하는데 여기에서 RollingFileAppender을 사용하여 로그 메시지를 저장합니다. 내 질문이 소멸자를 호출하여 I 명시 적으로 다음 줄에 의해 할당 된 메모리를 확보해야 할 것입니다 :RollingFileAppender를 사용하는 동안 명시 적으로 메모리를 해제해야합니까?

SharedAppenderPtr myAppender1(new RollingFileAppender(LOG4CPLUS_TEXT("myTTCCLayoutLogFile.log"), 
                   3 * 1024 * 1024, // Max backup size 
                   3));    // Max index 

전체 코드는 다음과 같습니다

#include "samplefileloggerheader.h" 

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
// Entry point for the program 
// 
int main() 
{ 
    // 
    // Local variables definition 
    // 
    int      initLoop = 0; // Initialization variable for 
               // the loop 
    int      LOOP_COUNT = 100000; 
    std::auto_ptr<Layout> myLayout1; 

    // 
    // Function logic begins here 
    // 
    for (;;) 
    { 
     log4cplus::initialize(); 

     // 
     // LogLog class is used to output log statements from within the 
     // log4cplus package. 
     // setInternalDebugging() Allows to enable/disable log4cplus 
     // internal logging 
     // 
     helpers::LogLog::getLogLog()->setInternalDebugging(true); 

     // 
     // Instantiating a file appender that will append events in the 
     // TTCCLayout() layout 
     // 
     SharedAppenderPtr myAppender1(new RollingFileAppender(LOG4CPLUS_TEXT("myTTCCLayoutLogFile.log"), 
                   3 * 1024 * 1024, // Max backup size 
                   3));    // Max index 
     myAppender1->setName(LOG4CPLUS_TEXT("sampleAppender1")); 

     // 
     // Instantiating a layout object 
     // 
     myLayout1 = std::auto_ptr<Layout>(new log4cplus::TTCCLayout()); 

     // 
     // Attaching the layout object with the appender object 
     // 
     myAppender1->setLayout(myLayout1); 

     // 
     // Getting the root logger 
     // 
     Logger::getRoot().addAppender(myAppender1); 

     // 
     // Creating instances of logger 
     // 
     Logger root  = Logger::getRoot(); 
     Logger test  = Logger::getInstance(LOG4CPLUS_TEXT("test")); 
     Logger subTest  = Logger::getInstance(LOG4CPLUS_TEXT("test.subTest")); 

     // 
     // Writing the logs to the file 
     // 
     for (initLoop; initLoop < LOOP_COUNT; ++initLoop) 
     { 
      NDCContextCreator _context(LOG4CPLUS_TEXT("for()")); 
      LOG4CPLUS_DEBUG(subTest, "Loop count index is : " << initLoop); 
     } // for 

     // 
     // Final break statement 
     // 
     break; 
    } // for 

    return 0; 
} // main() 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

질문 하나 더, 내가 수행해야 할 care of multi-threading 또는 log4clpus 나를 위해 그것을 할 수 있습니까?

답변

2

라이브러리는 알지만 변수 유형 (SharedAppenderPtr)의 이름은 shared_ptr 일종의 것으로, 리소스를 해제해야합니다.

관련 문제