gpt4 book ai didi

c++ - 这是一个糟糕的 C++ 对象构造吗?

转载 作者:行者123 更新时间:2023-11-30 02:29:09 25 4
gpt4 key购买 nike

我在一些地方看到过这样构造的对象:

Foo foo;
foo = *(new Foo());

在我看来这是非常错误的。 new 运算符为 Foo 分配内存,然后指针被取消引用并用于将内容复制到原始和已构造的 foo 对象。分配的内存泄漏,因为指针丢失。

这是邪恶的,永远不应该这样做,还是我错过了什么?

最佳答案

这非常非常可怕,是的,但是没有保证内存泄漏。

这取决于 Foo 类型。

在实践中永远不会有一种类型不是内存泄漏,但原则上可以定义例如

struct Foo
{
std::unique_ptr<Foo> p;
void operator=( Foo& o ){ p.reset( &o ); }
};

我添加了可怕的 incompatible-with-standard-containers void 结果类型,只是为了更好的衡量。 :)

所以,关于

the memory allocated is leaked, as the pointer is lost. Is this true or am I missing something?

…您只是错过了受训人员直接从这个 SO 答案中复制上述代码并将其插入公司的 Big Application™ 的案例,原因不明。

<支持>注释:
¹ Martin Matilla 写道 in a comment关于这个问题:“我想这种初始化来自 Java/C# 程序员试图创建新对象,注意到编译器不允许他们这样做,因为 foo 是一个对象而不是指针,并且添加 * 所以编译器是快乐。”,这是另一种可能性。

关于c++ - 这是一个糟糕的 C++ 对象构造吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39868617/

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