Деструктор вызывается на нежелательном объекте во время присваивания

myClassVar = MyClass(3);  

Я ожидал, что деструктор будет вызван для ранее созданного myClassVar слева.
Но на самом деле он вызывается для нового объекта, созданного MyClass (3) .

Мой полный тестовый код и результат приведены ниже ..

edit

Как мне решить проблему?
Реализовать оператор присваивания?
MyClass действительно имеет указатели и MYSQL_STMT *, мне интересно, как мне обращаться с переменной MYSQL_STMT *.

Мне просто нужен объект MyClassVar (3), а не MyClassVar (), который был впервые создан при создании объекта ClientClass.

Я довольно часто сталкивался с этой ситуацией и задаюсь вопросом, есть ли хороший способ сделать это.

#include <stdio.h>

class MyClass
{
public:
    MyClass() { printf("MyClass %p\n", this); }
    MyClass(int a) { printf("Myclass(int) %p\n", this); }
    ~MyClass() { printf("~MyClass %p\n", this); }

private:
    int mA;
};


class ClientClass
{
public:
    void Foo()
    {
        printf("before &myClassVar : %p\n", &myClassVar);
        myClassVar = MyClass(3); // this is the important line
        printf("after &myClassVar : %p\n", &myClassVar);
    }

private:
    MyClass myClassVar;
};

int main()
{   
    ClientClass c;
    c.Foo();
    return 0;
}

MyClass 0x7fff5fbfeba0
before &myClassVar : 0x7fff5fbfeba0
Myclass(int) 0x7fff5fbfeb70
~MyClass 0x7fff5fbfeb70 // <--- here destructor is called on the newly created object
after &myClassVar : 0x7fff5fbfeba0
~MyClass 0x7fff5fbfeba0
5
задан eugene 28 October 2011 в 07:33
поделиться