[英]defining a variable using a struct as pointer
我想使用struct
來定義變量。
使用struct作為pointer
或no pointer
使用pointer
來定義變量會更好嗎?
例如,這是我的結構:
struct mystruct {
//data members
double x, y, z;
}
我在下面的代碼中使用它:
void main() {
mystruct s1; //form 1
mystruct * s2 = new mystruct; //form 2
//.....
}
哪個變量定義更好使用? s1或s2?
我個人嘗試盡可能避免使用指針和動態分配的內存。
有關此內容的先前討論,請參見指針是否不好?
如果可行,最好使用對象,而不是指針。
使用對象比使用指針和從堆分配內存要快。
使用對象可以減少代碼行,並使代碼行更簡潔。
使用對象避免了在不需要內存時需要釋放內存的問題。
除非有特殊的原因要使用指針(例如,如果要創建該結構的一堆實例並將指針存儲在向量中),通常最好不要這樣做。
這有幾個原因:
總的來說,我寧願使用堆棧上的對象,而不是指向對象的指針,如果出於其他原因,除了不必擔心這些事情而使自己變得更容易外,我更喜歡。
關於您對類和結構的注釋(顯然已刪除),它們本質上是完全相同的。 它們在語法上略有不同(例如,類的成員默認情況下為私有,而結構的成員默認情況下為公共),但據我所知,並沒有真正的區別。 另外,指針並不在乎它所指向的東西。 實際上,它只有兩個數字:內存中的位置以及該位置處事物的預期大小。
void main() { mystruct s1; //form 1 mystruct * s2 = new mystruct; //form 2 //..... }
哪個變量定義更好使用? s1或s2?
s1
。
在C ++中, 僅在必須使用時才使用指針和動態內存分配。 如果您沒有從這些功能中獲得任何好處,那么您將只剩下它們的缺點。
手動new
/ delete
和智能指針(例如std::unique_ptr
或std::shared_ptr
將面臨一些缺點:
nullptr
完整性檢查。 std::shared_ptr
特殊缺點:
您將只能通過手動new
/ delete
面對的一些缺點:
nullptr
完整性檢查。 一些參考:
如果您還
delete
了同一范圍內的對象,則無需使用new
來創建該對象; 這樣的對象應該是局部變量。
始終使用標准智能指針和非所有者原始指針。 除非在極少數情況下實現自己的低級數據結構(甚至將其很好地封裝在類邊界內),否則切勿使用擁有的原始指針和刪除。
PS: void main
不是合法的C ++。 將其設為int main
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.