C++에서 원시 포인터를 사용하는 것이 좋지 않습니다. 대신 auto_ptr
을 사용해야합니다. 아래 코드에서 에 생성 된 foo()
의 벡터를 채 웁니다. 내가 올바르게하고있는 중이거나 명시 적 포인터를 사용하지 않고 할 수있는 더 좋은 방법이 있습니까?C++에서 명시 적/원시 포인터 사용
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void foo(vector<string>& v){
v.push_back(" hru");
}
int main(){
vector<string> v;
v.push_back("hi");
foo(v);
for(int i=0;i<v.size(); i++){
cout << v[i];
}
}
참조 및 포인터가 비슷 하나 개의 매우 중요한 차이로 :
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void foo(vector<string> *v){
(*v).push_back(" hru");
}
int main(){
vector<string> v;
v.push_back("hi");
foo(&v);
for(int i=0;i<v.size(); i++){
cout << v[i];
}
}
보통 auto_ptr은 원하는 내용이 아닙니다. –
원시 포인터가 나쁜 사람은 누구입니까? 포인터 메모리 할당과 할당 해제의 메커니즘과 수행해야 할 작업을 이해할 때까지 나쁘지 않습니다. 이것은 C++ (http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/smart_ptr.htm)에서 사용되는 좀 더 똑똑한 포인터입니다. STL 컨테이너와 auto_ptr을 절대로 혼합하지 마십시오. – DumbCoder
@DumbCoder 나는 당신이 "이해할 때까지는 _only_ 나쁜 것"이라고 생각한다. –