gpt4 book ai didi

c++ - 将原始指针分配给 auto_ptr

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

我正在阅读 an article关于有效使用 auto_ptr。在那里,建议将以下代码作为正确的代码段:

// Example 10(c): Correct (finally!)
//
auto_ptr<String> f()
{
auto_ptr<String> result = new String;
*result = "some value";
cout << "some output";
return result; // rely on transfer of ownership;
// this can't throw
}

但据我所知,auto_ptr 的赋值运算符只接受另一个 auto_ptr 作为 rhs——以避免意外误用.那么,下面这行是文章中的拼写错误,还是真的应该有效?

auto_ptr<String> result = new String;

最佳答案

该行确实不正确,但不是出于您认为的原因。它不调用赋值运算符,而是调用构造函数。当你说 =当您第一次声明一个对象时,它不会创建该对象然后调用赋值运算符。相反,它只是调用构造函数并将其作为参数传递。所以从这个角度来看,它是“正确的”,因为它使用的是构造函数,而不是赋值运算符

或者至少如果可以的话它会。你会注意到 std::auto_ptr 的构造函数接受一个指针。但是,它标记为 explicit ,这意味着上面的“快捷方式”是不允许的。您必须显式调用构造函数(带括号),并且不能使用 =作为这样做的捷径。这就是它不正确的原因。相反,如果他们说 auto_ptr<String> result(new String); ,一切都会好起来的。此外,如果构造函数未标记为 explicit ,一切都会好起来的。但事实上,这是不正确的。

关于c++ - 将原始指针分配给 auto_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598779/

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