我在数组A* a_ptrs[3]
中存储指向vec_A元素的指针。假设不会调整vec_A的大小。因此,a_ptrs[i]
将指向正确的元素。
我的问题是:
假设A * a_ptrs [3]在class B
中声明。因为它不是使用'new'创建的,所以我猜我不需要在析构函数中删除它。我是对的吗?
class A {
public:
int getNumber();
A(int val);
~A(){};
private:
int num;
};
A::A(int val){
num = val;
};
int A::getNumber(){
return num;
};
int main(){
int i =0;
int num;
std::vector<A> vec_A;
for ( i = 0; i < 10; i++){
vec_A.push_back(A(i));
}
A* a_ptrs[3];
a_ptrs[0] = &vec_A[0];
a_ptrs[1] = &vec_A[3];
a_ptrs[2] = &vec_A[5];
for (i = 0; i<3; i++){
std::cout<<"\n: a_ptrs[i].getNumber() = "<<a_ptrs[i]->getNumber();
}
std::cout << "\nPress RETURN to continue...";
std::cin.get();
return 0;
}
答案 0 :(得分:2)
答案 1 :(得分:2)
是的,delete
仅用于使用new
分配的变量。
答案 2 :(得分:0)
正确,因为程序中没有动态内存分配。
我的建议是使用vector.reserve()函数来保留向量的大小,这将提高程序性能。
基本上,当您向CArray(MFC)或std :: vector添加元素时,它会重新分配必要的内存并复制元素,这样会导致内存碎片并降低程序速度。