作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
C++ delete - It deletes my objects but I can still access the data?
(13 个回答)
1年前关闭。
我想我理解 pass-by-value 和 pass-by-reference 背后的基本思想。我创建了一个玩具代码来解释我的问题:
class C2 {
public:
int val;
C2() {}
~C2() {}
};
class C1 {
public:
C2 * x;
C1(C2 & x_) {
x = &x_;
}
C1() {}
~C1() {}
};
void func (C1 & y) {
C2 z;
z.val = 5;
y = C1(z);
}
void func_p (C1 & y) {
C2 * z;
z = new C2();
z->val = 5;
y = C1(*z);
delete z;
}
int main()
{
C1 m_y1;
func(m_y1);
cout << m_y1.x->val << endl; // Prints 5
C1 m_y2;
func_p(m_y2);
cout << m_y1.x->val << endl; // Prints junk instead of seg fault
return 0;
}
我有以下问题:
z
是 func
的本地人, 并且在 func 退出后会超出范围。所以访问指向 z
的指针(在这种情况下 x
中的 C1
)应该导致段错误? z
在 func_p
中被删除这不应该也导致段错误吗? func_c
void func_c (C2 & y) {
C2 z;
z.val = 5;
y = z;
}
int main()
{
C1 a;
a.x = new C2();
func_c(*(a.x));
cout << a.x->val << endl; // Prints 5
}
我假设这将是一个定义的行为,因为将调用复制函数。最初
a.x = new C2()
, 在
func
之后被称为,
z
对象被复制到
a.x
?
最佳答案
- How can the first cout print 5.
- ... Since z is deleted in func_p shouldn't this also result in segmentation fault?
关于c++ - 如果将指针值作为引用传递,该值的生存期是多久?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63223169/
我正在使用身份服务器 3 保护 Web 应用程序。我的应用程序分为 2 个 oidc 客户端,一个 ASP.Net MVC 客户端和一个使用 oidc-client javascript 库的 jav
我正在使用 Silex 构建一个小型后台项目,我正在使用 PdoSessionHandler 将 session 存储在数据库中。我已经成功地将 session 存储在数据库中,但似乎将 cookie
我是一名优秀的程序员,十分优秀!