gpt4 book ai didi

c++ - 危险的做法?

转载 作者:行者123 更新时间:2023-11-30 01:22:08 25 4
gpt4 key购买 nike

这有什么危险吗?我不知道其他方法,但它看起来很可疑。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com