我在類模板中使用指標時遇到問題。如果“vv”存盤指向向量的指標,我將無法vv從B子類正確訪問;如果我只是存盤向量,它就可以作業。但是我想要做的事情需要我存盤指標。老實說,我不知道我做錯了什么,所以這里是代碼:
template<typename T>
class A{
public:
std::vector<std::vector<T>*> vv;
void add(std::vector<T> new_vec)
{
vv.push_back(&new_vec);
}
virtual void print(){}
virtual ~A(){}
};
template<typename T>
class B : public A<T>{
public:
void print() override{
std::cout << this->vv[0]->at(0) << std::endl;
}
};
int main(){
int i = 10;
std::vector<int> v;
v.push_back(i);
A <int>*a = new B<int>();
a->add(v);
a->print();
return 0;
}
a->print()列印0而不是10. 我也不能改變里面的東西main()。我將非常感謝您的幫助!
uj5u.com熱心網友回復:
這里:
void add(std::vector<T> new_vec)
{
vv.push_back(&new_vec);
}
您將指向本地引數的指標存盤new_vec在vv. 該本地副本只會在方法回傳之前一直存在。因此向量中的指標是無用的。稍后取消參考它們會呼叫未定義的行為。如果你真的想存盤指標,你應該將一個指標(或參考)傳遞給add. 不過,您應該使用智能指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/385826.html
