gpt4 book ai didi

c++ - new 然后扔进 C++ 构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:46 25 4
gpt4 key购买 nike

如果我这样做

Bat::Bat() : m_member_str(new std::string("Am I freed?"))
{
throw std::runtime_error("oops");
}

是否释放了分配的std::string?我在想可能是因为没有调用析构函数。

我没有使用 std::string,而是我自己的类,只是作为一个简单的例子展示。

最佳答案

这个例子是智能指针的经典用例。 Bat 未完全构造,因此不会调用析构函数,但会调用 m_member_str 和所有其他完全构造的成员的析构函数。如果你不想要像 这样丑陋的代码块,试试 { foo(); } catch (...) { 删除 m_member_str; ,您必须熟悉 RAII。

std::auto_ptrboost::scoped_ptr 将在 C++03 或 C++11 中的等效项中为您提供帮助。将它们用于拥有的成员指针几乎没有什么缺点。

关于c++ - new 然后扔进 C++ 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655149/

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