1

オブジェクト参照がパラメーターとして渡されると、関数 (pass(sample const &ob1)) スコープの終了後にデストラクタが呼び出されるのはなぜですか? オブジェクト参照を渡しているときに、関数 pass() で新しいオブジェクトを作成するのはなぜですか?

これについて助けてください、メモリダンプエラーが発生しています

#include<iostream>
using namespace std;


class sample
{
public:
    int *ptr;
    sample()    
    {
        cout<<"this is default constructor & addr  "<<this<<endl;
    }
    sample(int i)
    {
        cout<<"this is single parameter constructor & addr "<<this<<endl;
        ptr=new int[i];

    }
    void disp() 
    {
        cout<<"hello \n";
    }
    ~sample()
    {
        cout<<"destructor & addr "<<this;
        delete ptr;
    }

};



sample pass(sample const& ob1)
{

for(int i=0;i<5;i++)
    ob1.ptr[i]=10;
return ob1;

}

int main()
{   
sample obj(5);
sample copy;
cout<<"before calling \n";
obj.disp();
pass(obj);
copy.disp();
cout<<"after calling \n";
return 0;
}
4

3 に答える 3

2

これは、値で返すためです。

sample pass(sample const& ob1)
{
   //...
   return ob1;  
}

また、RVO が発生する保証はありません。この場合、それが発生する可能性さえありません。

于 2012-06-05T11:40:19.613 に答える
0

値渡しを返してsampleいます。これには、 a の構築と破棄が含まれますsample(ただし、特定の状況では、最適化によって を取り除くことができます)。

于 2012-06-05T11:40:10.907 に答える