[英]Why is shared_ptr returning an empty list?
我正在使用 Xerces-c(版本 3.2)並且我有這個函數,它包含XMLString::transcode
方法。
XMLCh* class_name::transcode(const std::string text) {
auto returned = std::shared_ptr<XMLCh>(XMLString::transcode(text.c_str()), class_name::releaseXMLCh);
return returned.get();
}
( XMLCh
是一個char16_t
)
這樣做的目的是要有一個共享指針,當不再需要它時,它將調用releaseXMLCh()
。 這是releaseXMLCh()
的實現:
void class_name::releaseXMLCh(XMLCh* text) {
XMLString::release(&text);
}
根據 Xerces-c 文檔,需要在調用XMLString::transcode
之后調用 XMLString XMLString::release
以避免內存泄漏。
然而,這個函數只返回""
,不管輸入字符串是什么。 我懷疑我對shared_ptr
做錯了什么,因為自己調用XML::transcode
工作得很好。
有誰知道為什么會這樣?
想一想:
std::shared_ptr
。std::shared_ptr
超出范圍並被破壞。 將有多少std::shared_ptr
指向內部對象?
沒有任何。 所以它也被破壞了。 因此,這不會以這種方式工作。
您正在返回一個指向已破壞對象的指針,這會導致未定義的行為。
您需要一個持久的智能指針對象(甚至可能是一個unique_ptr
)或者只使用老式的new
- delete
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.