簡體   English   中英

為什么 shared_ptr 返回一個空列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM