在C++中,是否不允许直接传递对象?

Jay*_*ark 0 c++ crash runtime-error pass-by-value

我知道C,但我不擅长C++.

以下代码将崩溃(在getval()中,使用引用作为参数是ok).并且*p在第一次cout陈述之后改变了价值.看起来存在一些超出内存的覆盖.

我的问题是它崩溃的原因(或者为什么它的价值发生了变化).这是对象的"按价值呼叫",所以它应该工作吗?

class myclass { 
  int *p; 

  public: 
    myclass(int i); 
    ~myclass() { delete p; } 
    int getval(myclass o); 
}; 

myclass::myclass(int i) 
{ 
  p = new int; 

  if (!p) { 
    cout << "Allocation error\n"; 
    exit(1); 
  } 

  *p = i; 
}

int myclass::getval(myclass o) 
{ 
  return *o.p; 
} 

int main() 
{ 
  myclass a(1), b(2); 

  cout << a.getval(a) << " " << a.getval(b) << endl; 
  cout << b.getval(a) << " " << b.getval(b) << endl; 

  return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

Che*_*Alf 6

阅读三条规则.

实质上,您的代码不支持按值复制.

因此,动态分配的内存过早地被释放(由析构函数).

干杯&hth.,