我該如何定義我需要調用「delete []」作爲指針還是不是我的類的析構函數? 指針(成員變量)可指向堆中分配的緩衝區或不在不同時間(它可以是隻讀內存中的文字或放置在堆棧中的文字)。 解決問題的最佳方法是什麼? 我是否需要使用另一個標誌,或者可能會得到堆邊界的地址並檢查它們之間的緩衝區地址? 還是有更合理的方法?定義放置c字符串的位置
1
A
回答
2
你不能告訴,如果一個指針自動存儲,靜態存儲器或動態存儲器中,只需查看指針即可。你需要存儲一個標誌的時候,當你設置的指針 - 例如,像這樣的:
class classWithDynamicData {
private:
bool needToDelete;
char strData[];
public:
classWithDynamicData(int size) : needToDelete(true), strData(new char[size]) {
}
classWithDynamicData(char* data) : needToDelete(false), strData(data) {
}
~classWithDynamicData() {
if (needToDelete) delete[] strData;
}
...
// You need to define a copy constructor and an assignment operator
// to avoid violating the rule of three
};
+0
沒有直接關係,但是這個解決方案違反了[Rule of Three](http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))。 – 2013-04-30 15:14:55
+0
@Robᵩ好點! – dasblinkenlight 2013-04-30 15:16:03
2
- 不要使用動態分配的成員(使用
std::string
代替char *
或std::vector
,而不是動態分配的數據成員)或 - 使用智能指針
相關問題
- 1. 在字符串中定義的位置獲取字符C在C
- 2. 如何找到字符串放在字符串中的位置?
- 3. 放置自定義數據的位置
- 4. 反轉C中字符串的位置
- 5. 在字符串C中的位置#
- 6. 根據字符串的位置(C#)
- 7. 根據放置在特定位置的特定字符串更新的行
- 8. C - 遞歸字符串中子字符串的位置
- 9. 放置元素(自定義位置)
- 10. C#用位置替換字符串
- 11. 在C字符串中查找位置
- 12. 將字符串放在Dos腳本中的特定位置
- 13. 在Java中放置i18n密鑰字符串的位置
- 14. 在字符串數組中的字符串的特定位置
- 15. 把字符放在一個精確的字符串位置
- 16. 字符在字符串中當前位置左側的位置
- 17. 查找特定字符的字符串,並將其放置在不同的位置以相同的字符串定義的分隔符後
- 18. 在特定位置分割字符串
- 19. 未定義的方法 - geoBoundingBoxQuery(字符串位置)
- 20. 如何將指數定義爲字符串的索引位置
- 21. 根據字符串位置在Google地圖中放置標記
- 22. 資源字符串位置
- 23. 解析位置字符串
- 24. 字符串中的字符C的位置
- 25. 需要實施什麼方法來重新定義自定義UILabel中的字符串的位置和位置?
- 26. 刪除C中給定位置的子字符串
- 27. 將字符串拆分爲特定的數組位置c#
- 28. 如何在c#中的特定位置替換字符串?
- 29. iOS - 字符串 - 在特定位置插入字符串
- 30. 子串在字符串中的位置
如果你的指針指向字符數據,您可以通過使用'的std :: string'而不是避免整個問題'char *'。 – 2013-04-30 15:13:26
但我使用它來進行套接字數據傳輸,並且一個緩衝區可以保存字符數據(以ASCII格式命令),而在另一個時間只能保存字節數據。 – SerG 2013-04-30 15:19:44
優秀!這聽起來像'std :: string'是要走的路。 – 2013-04-30 15:31:18