UINT C_BaseUtil::getProcessMemoryUsed() { UINT uiTotal = 0L; HANDLE hProcess = ::GetCurrentProcess(); PROCESS_MEMORY_COUNTERS pmc; if(::GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc))) uiTotal = pmc.WorkingSetSize; return uiTotal; } |
IXMLDOMDocument *pDoc = NULL; CoCreateInstance(...) …… pDoc->Release(); |
IXMLDOMNode *pNode = NULL; if(FAILED(pDoc->selectSingleNode(_bstr_t(\"Workbook\"), &pNode)) || pNode==NULL) throw(_T(\"selectSingleNode failed!\")); if(FAILED(pDoc->selectSingleNode(_bstr_t(\"Workbook\"), &pNode)) || pNode==NULL) throw(_T(\"selectSingleNode failed!\")); |
IXMLDOMDocumentPtr docPtr = NULL; docPtr.CreateInstance(...) …… |
IXMLDOMNodePtr nodePtr = NULL; if(FAILED(pDoc->selectSingleNode(_bstr_t(\"Workbook\"), &nodePtr)) || nodePtr==NULL) throw(_T(\"selectSingleNode failed!\")); if(FAILED(pDoc->selectSingleNode(_bstr_t(\"Workbook\"), &nodePtr)) || nodePtr==NULL) throw(_T(\"selectSingleNode failed!\")); |
Interface** operator&() throw() { _Release(); m_pInterface = NULL; return &m_pInterface; } |
template<> _com_ptr_t(const _com_ptr_t& cp) throw() : m_pInterface(cp.m_pInterface) { _AddRef(); } |
classA *pA = new classA; auto_ptr<classA> ptr1(pA); auto_ptr<classA> ptr2(pA); |
1.2:auto_ptr是不能以传值方式进行传递的。
因为所有权的转移,会导致传入的智能指针失去对指针的所有权。如果要传递,可以采用引用方式,利用const引用方式还可以避免程序内其它方式的所有权的转移。就其所有权转移的做法:可以查看auto_ptr的拷贝构造和=操作符的源码,此处略。
1.3:其它注意事项:
·不支持数组。
·注意其Release语意,它没有引用计数,与com提供的智能指针不同。Release是指释放出指针,即交出指针的所有权。
·auto_ptr在拷贝构造和=操作符时的特珠含义决定它不能做为STL标准容器的成员,
好了,看了上面的注意事项,特别是第三条,基本上可以得出结论:在实际应用场合,auto_ptr基本没什么应用价值的。