使用运算符"="将一个结构/类对象分配给另一个结构/类对象
assigning one structure/class object to another with operator "="
我有结构aa
,我正在尝试运行这样的代码:
aa * b = new aa;
aa * c = new aa;
c=b;
delete (b);
c.useSomeFunction
b
销毁后,我可以使用c
指向的对象吗?
相同的问题在情况下:
aa * b = new aa;
aa * c ;
c=b;
delete (b);
c.useSomeFunction
在您的示例中,两个指针都指向同一个对象,因此在销毁它之后,它们都无效。此外,在您的第一个示例中,c=b
是一个自动内存泄漏,因为您失去了释放aa * c = new aa
中分配的内容的能力。
此外,这不可能是真正的代码,因为b.usesomefunction
不会编译。你的意思是b->use..
。
问题的标题具有误导性,因为您在代码中没有使用operator=()
。只能分配内置类型的指针。
如前所述:
在第一个示例中,指针分配导致内存泄漏,因为对象(*c)
无法再删除。此外,您不能调用(*b)
的函数(即使在删除对象(*b)
后被c
指向。
在第二个例子中,您没有得到内存泄漏。请注意,在生产代码中,应该使用nullptr
初始化每个指针。此外,在这里,删除对象后,您无法访问(*b)
的函数。
对函数的调用必须是CCD_ 15才能通过语法纠正。
你可能想要的(标题中建议的)是创建一个新对象,并将旧对象的内容分配给它
struct aa {
aa():x(0),y(0){}
aa& operator=(const aa& rhs);
int foo(){return x-y;}
int x;
int y;
};
aa& aa::operator=(const aa& rhs){
if (this == &rhs) {return *this;}
x = rhs.x;
y = rhs.y;
return *this;
}
int main(){
aa *b = new aa();
aa *c = new aa();
*c = *b;
delete(b);
c->foo();
delete(c);
return 0;
}
相关文章:
- 为什么我们再次从结构对象创建结构变量?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 结构对象的指针成员在传递给函数时被修改
- C++ 提升 - 包含类层次结构对象的类的序列化
- 如何将变量从变量传递到指针结构对象
- 在 boost::heap::p riority_queue 中推送结构对象时出错
- 在 c++ 中将结构的每个成员写入文件和将结构对象直接写入文件之间有什么区别吗?
- 为什么结构对象不是类型?
- 程序不会编译,使用带有结构对象的数组
- 在类构造函数中初始化自定义结构对象的正确方法
- 使用QString或字符串调用结构对象
- 在输入结构对象的输入过程中运行时间错误
- C 中的堆是否包含类和结构对象,或者仅包含指针
- 如何将部分初始化的结构对象放入向量
- 如何分配给结构对象的成员
- 尝试创建结构对象,在位置0x3FE00000中创建访问冲突写入错误
- erase() 不适用于结构/对象内的 STL 向量
- 将指向参数个数可变的函数的指针存储在结构对象中
- 如何通过先前存储的ID从结构对象中检索值?C
- 非结构对象布局