On 06/28/2013 09:01 AM, monarch_dodra wrote:

> And I'm 99% sure C++ doesn't have this problem...

+1%. :)

I just finished checking. No, C++ does not have this problem. But there is the following related issue, which every real C++ programmer should know. ;)


http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/shared_ptr.htm#BestPractices

Ali

P.S. The C++ program that I have just used for testing:

#include <iostream>
#include <stdexcept>

using namespace std;

int callme()
{
    throw runtime_error("");
    return 0;
}

struct S
{
    int i_;

    S(int i)
        :
        i_(i)
    {
        cout << "constructing: " << i_ << " at " << this << '\n';
    }

    S(const S & that)
    {
        cout << "copying: " << that.i_ << " to " << this << '\n';
        i_ = that.i_;
    }

    ~S()
    {
        cout << "destroying: " << i_ << " at " << this << '\n';
    }
};

void foo(int i, S s)
{
   s.i_ = 2;
}

int main()
{
    S s = S(1);

    try {
        foo(callme(), s);

    } catch (...) {
        cout << "caught\n";
    }
}

Reply via email to