小编Abh*_*hay的帖子

复制构造函数:何时释放存储?

鉴于代码:

class Sample
{
 public:
      int *ptr;
      Sample(int i)
      {
      ptr = new int(i);
      }
      ~Sample()
      {
      delete ptr;
      }
      void PrintVal()
      {
      cout << "The value is " << *ptr;
      }
 };
 void SomeFunc(Sample x)
 {
     cout << "Say i am in someFunc " << endl;
 }
 int main()
 {
     Sample s1= 10;
     SomeFunc(s1);
     s1.PrintVal();
 }
Run Code Online (Sandbox Code Playgroud)

输出是:

Say i am in someFunc
Null pointer assignment(Run-time error)
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么第二行输出来了.输出的第二行.我认为编译器在未明确指定时提供了复制构造函数.因此,在函数SomeFunc(Sample x)中,应该创建和销毁SomeFunc()的本地对象,它是Sample类型的X,并且main()中的Sample类型对象(s1)应该保持不变,并且应该只在之后释放主要出口.请回答上述行为发生的原因?

c++ copy-constructor

1
推荐指数
1
解决办法
126
查看次数

标签 统计

c++ ×1

copy-constructor ×1