-13
A
回答
0
新的運營商主要做了兩兩件事:
它分配足夠的存儲空間來保存請求的類型的對象。 (在上例中,它分配足夠的內存來容納此字符串對象)
- 它調用一個構造函數來初始化已分配內存中的對象。
現在這個「新」是調用哪個函數?
它是運營商新的。
void * operator new (size_t size);
返回類型是void *。 由於此函數返回一個指向raw的指針,該指針未被鍵入並且未初始化的內存足夠大以容納指定類型的對象。 size_t指定分配多少內存。
如果我們直接調用operator new,它會返回一個指向足夠容納一個字符串對象的內存塊的指針。
void *pointRawMemory = operator new(sizeof(string));
運算符new類似於malloc。它只負責分配內存。它對構造函數一無所知。 「新」運算符的工作是採用運算符新返回並將其轉換爲對象的原始內存。
0
一個字符串對象被分配在動態存儲區中並且它的構造函數被調用(接收const char *
的那個)。
然後,該構造函數的結果(對象的地址)被放入ptr
變量中,該變量可能存在於許多不同的存儲區之一(如靜態存儲區或堆棧中),具體取決於聲明實際上在你的代碼中是。
這就是所有你需要知道的一切,「在...下」,這是一個實現細節。
根據operator new
和new
之間的差異,前者在較低的抽象層次上運行,只是簡單地分配足夠的內存來存儲某些內容,而不調用任何構造函數。
相關問題
- 1. 全球運營商和會員運營商之間的區別
- 2. 新線運營商
- 3. 運營商新的Arduino的
- 4. 採用新的運營商
- 5. 運營商新的C++
- 6. 運營商新的超載和對齊
- 7. 新的運營商和引用錯誤
- 8. UNION運營商更新
- 9. 測試::運營商新
- 10. 全球運營商<<和成員運營商之間的共存<<
- 11. 從Java到C++和新運營商
- 12. 超載運營商新,沒有超載運營商刪除
- 13. 「之間」運營商的jQuery QueryBuilder
- 14. 查詢 - 運營商之間的PHP ADODB
- 15. 空 - 結合運營商和運營商&&
- 16. &&和||運營商
- 17. 位運算和booolean運營商之間的差異 '與'
- 18. Yii - Cdbcriteria - 選擇在關係條件與運營商之間的位置
- 19. 未定義的運營商新引用
- 20. C++新的運營商使用問題
- 21. PHP新的運營商返回參考
- 22. 新的運營商返回null - C#
- 23. 使用新的運營商在C++
- 24. 新的運營商返回null
- 25. PHP更新與運營商的mysql表
- 26. 什麼是==目標C isEqualToString和運營商之間之探源?
- 27. 與+運營商聯繫
- 28. 的javascript:運營商之間的回報值差 - 和 - =
- 29. C++ STL分配器VS運營商新
- 30. 致電班級專用運營商新
我非常懷疑你的問題是一個很適合這個網站。請參考:http://stackoverflow.com/help/how-to-ask。禮貌也有幫助。 – 2015-03-25 07:40:51
你自己研究了什麼,你究竟知道些什麼?由於這是一個相當初級的問題,我假設你正在從[好書](http://stackoverflow.com/q/388242/1782465)或教程中學習。它是如何解釋的以及該解釋的哪些部分不清楚? – Angew 2015-03-25 07:46:37