2014-04-08 12 views
0

이 코드는 함수 내에서 정적 목록에 새 객체를 추가합니다. 목록은 함수를 참조하여 전달됩니다.정적 목록의 변수 수명

목록에있는 새 개체의 수명이 어땠습니까?

코드 샘플 :

#include <list> 
#include <string> 
#include <iostream> 

using namespace std; 

struct MyStruct 
{ 
    int x; 
    string str; 
}; 

void addStructToList(list<MyStruct> &myStructlist, int _x, string _str) 
{ 
    MyStruct newStruct; 
    newStruct.x = _x; 
    newStruct.str = _str; 
    myStructlist.push_back(newStruct); 
} 

void main() 
{ 
    list<MyStruct> myStructlist; 
    addStructToList(myStructlist, 111, "aaa"); 
    addStructToList(myStructlist, 222, "bbb"); 
    addStructToList(myStructlist, 333, "ccc"); 

    for (auto it = myStructlist.begin(); it != myStructlist.end(); it++) 
    { 
     cout << it->x << " " << it->str << endl; 
    } 

    system("pause"); 
} 

출력 :

111 aaa 
222 bbb 
333 ccc 
Press any key to continue . . . 

질문 :

메모리 사용의 관점에서이 코드는 안전합니까?

"newStruct"평생이란 무엇입니까? addStructToList() 또는 Main()?

+1

코드에 정적 목록이 표시되지 않습니다. – Oktalist

+0

추천하는 읽기 : [ "네임 스페이스 표준을 사용하는 것이 왜 나쁜 습관이라고 생각합니까?"(http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) – Deduplicator

답변

1

이 코드는 메모리 사용면에서 안전한가요?

예. 안전합니다. list 및 은 자동으로 메모리 관리를 담당합니다. 정말 많은 항목을 목록 (예 : 100000000)에 추가하면 메모리 부족 오류가 발생할 수 있습니다.

"newStruct"평생이란 무엇입니까? addStructToList() 또는 Main()?

newStructaddStructToList에만 존재합니다. 그러나 복사본이 생성되어 myStructlist에 저장됩니다. 사본은 Main에 있습니다.

작은 추가 말 : 항상 값이 const를 참조 string을 통과하지 :

void addStructToList(list<MyStruct> &myStructlist, int _x, const string& _str) { ... } 

또 다른 말을 : 당신은 "정적"오해라는 단어를 사용합니다. C++의 정적 인 의미에 대한 설명은 The static keyword and its various uses in C++을 참조하십시오.