这有危险吗?我不知道其他方式可以做,但似乎很可疑。

class cA
{
public:
    cA(){}
    ~cA(){}
    int a;
//say class have tons of members..
};


int _tmain( int argc, _TCHAR* argv[] )
{
    cA obj;
    cA *ptr = new cA;
    *ptr = obj;
    //ofc there is a 'delete ptr;' after
}
如果我还记得C++,这意味着将创建cA对象,并且ptr指向该对象,我必须这样做才能在长寿命的容器(vector<cA*>)上插入。
以这种方式将obj的内容从堆栈复制到堆是否有效?
编辑可能的解决方案?
class cA
{
public:
    cA(){}
    ~cA(){}
    int a;
    void Copy( cA & ref )
    {
        a = ref.a;
    }
};


int _tmain( int argc, _TCHAR* argv[] )
{
    cA obj;
    cA *ptr = new cA;
    ptr->Copy( obj );

最佳答案

代替这种形式:

cA obj;
cA *ptr = new cA;
ptr->Copy( obj );

为什么不使用这种形式?
cA obj;
cA *ptr = new cA(ob);

您的副本构造函数将类似于以下内容。还应该有一个赋值运算符。
class cA
{
public:
    cA(){}
    CA(const cA& ref)
    {
        a = ref.a;
    }
    ~cA(){}

    cA& operator=(const cA& p) {
        if (this != &p) {  // make sure not same object
            a = p.a;
        }
        return *this;    // Return ref for multiple assignment
    }

    int a;
};

而且,您之前所做的一切都不是危险的,但也许很难理解。

关于c++ - 危险的做法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16908434/

10-10 01:52