我有一个疑问,即声明变量,它们的范围,以及它们的地址是否可以发送到其他函数,即使它们是在堆栈中声明的?
class A{
AA a;
void f1(){
B b;
aa.f2(&b);
}
};
class AA{
B* mb;
f2(B* b){
mb = b;
//...
}
};
之后,我AA::mb在代码中使用指针.所以我想知道的事情如下.A::f1()函数时,b变量自声明为局部变量并放置在堆栈上后,不能再使用了.
Bclass是a std::<vector>,并且AA::mb不再是指向该向量的指针,而是例如向量集合本身.我想避免将所有内容复制AA::f2()到成员AA::mb中mb = b.你会推荐哪种解决方案,因为我无法指定它,因为它会在程序退出时被销毁AA::f2()它包含本地变量的地址,它不再可用,所以指针不再有效了?
是.它变成了一个悬垂的指针.
您可以尝试vector::swap,如:
class AA {
B mb; // not a pointer
f2(B* b){
mb.swap(*b); // swap the content with b, which is just a few pointer assignments.
Run Code Online (Sandbox Code Playgroud)