將指針寫入字符串,刪除指針並從字符串加載指針?是否有可能?(C++)
回答
可以執行這些操作,但它們不會影響您(可能)之後的效果。
將指針寫入字符串將只存儲指針值,即指向對象的地址。這是一個或多或少長度不變的字符串,如0x7f2b93c91780(在64位系統上)。當然,這不會捕獲任何實際對象的狀態。
當您在指針上使用delete
時,指向的內存將返回到系統;它不再是你的使用。指針本身沒有被刪除,操作隻影響被指向的內存。另外,當您使用delete
時,指針的值實際上並不會改變。因此,如果您現在通過從存儲在其他地方的字符串中讀取它來重新加載它,則沒有區別:它仍指向您不再擁有的內存,因此無需讀取或寫入,即可調用undefined behavior。
像PiotrLegnica建議的那樣,您需要將整個對象序列化爲一個字符串,然後從序列化版本重新創建對象(反序列化它)。
實際上,當你說'delete ptr'時,你不會刪除指針,而是指向它的值。指針對象本身只在超出作用域時才被刪除。所以「刪除指針」(通常)不是一個正確的術語。除此之外,我完全同意你的答案。 +1 – sbi 2009-10-04 14:20:25
@sbi:我猜我被共通性蒙上了一層陰影,我真的認爲並且說「刪除指針」,雖然我當然知道指針本身並不是被刪除的......我試着更加精確。 – unwind 2009-10-04 14:31:31
@unwind:這只是一個小點。 (雖然我認爲精確往往是有幫助的,尤其是在回答那些顯然有問題的新手問題時......) – sbi 2009-10-04 23:03:18
這是可能的,但它不會做你認爲它會做的事。將整個對象保存爲字符串稱爲序列化 - 如果需要,請參閱Boost.Serialization(或Protocol Buffers,如註釋中所述)。
如果可能,建議使用Google協議緩衝區:http://code.google.com/intl/fr/apis/protocolbuffers/docs/overview.html,最好將對象本身的序列化/反序列化結構與前向/後向解相關兼容性。 – 2009-10-04 13:49:00
- 1. 是否有可能#include在C++類中?
- 2. 是否有可能在Objective-C
- 3. 是否有可能在c#中「鏈」EventHandlers?
- 4. 是否有可能實現在C#
- 5. 是否有可能將js嵌入c#
- 6. 是否有可能在Magento
- 7. 是否有可能「關閉」
- 8. 是否有可能在Android
- 9. 是否有可能在Java
- 10. 是否有可能訪問
- 11. 是否有可能在IDA
- 12. 是否有可能在iPhone
- 13. 是否有可能讀swift
- 14. 是否有可能在HAPIJS
- 15. 是否有可能在Javascript
- 16. 是否有可能在XSLT
- 17. 是否有可能在CMD.EXE
- 18. 是否有可能在Symfony3
- 19. 是否有可能在Ext.grid.column.Action
- 20. 是否有可能在.NET
- 21. 是否有可能在
- 22. 是否有可能與Java
- 23. 是否有可能在python
- 24. 是否有可能在android
- 25. 是否有可能在android
- 26. 是否有可能在PhantomJS
- 27. 是否有可能在widget.TextInputLayout
- 28. 是否有可能在GSA
- 29. 是否有可能在C中實現temeplatization,因爲它可能在C++中
- 30. 是否有可能檢測到Java中是否有類可用?
爲什麼不可能? – Zed 2009-10-04 13:33:46
你應該多解釋一下你的問題。例如,「刪除指針」是什麼意思? – sellibitze 2009-10-04 13:38:31