【发布时间】:2015-07-08 08:02:53
【问题描述】:
我在c++中搜索了一些关于delete this的帖子,知道delete this通常是一个坏主意,因为delete this通常意味着管理不善:new和delete的数量不匹配,也可能有一些指针在外面类仍然指向这个。
但我搜索的帖子主要是关于删除原始对象,并没有讨论将原始对象替换为新对象的情况。
有时我想重新创建对象,因为我希望对象回到初始状态,通过使用 delete this+memmove(this,new A(),sizeof(A)) 来“realloc”对象,如下所示:
class A{
public:
int value;
void test(){
delete this;
memmove(this,new A(),sizeof(A));
}
};
安全吗?还是有任何未定义的行为?
即使它有效,它是一种糟糕的编码风格吗?
【问题讨论】:
-
提示:执行
delete this;后this指向什么?而new A()分配的内存又会怎样? -
A a; a.test();嗯...是的。为了:它不安全,它调用 UB(不仅仅是我展示的情况)。 -
@amuse 到目前为止,您已经在 SO 上提出了 41 个问题,其中 37 个问题至少收到了一个答案,但您还没有将一个标记为已接受。如果某个答案最有助于解决您的问题,您可以通过单击旁边的勾号将其标记为已接受。
标签: c++ memory-management coding-style