gpt4 book ai didi

c++ - unique_ptr 的范围是常量吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:56:50 25 4
gpt4 key购买 nike

我想在一个方法中使用unique_ptr。我想依靠这样一个事实,即它在方法的右大括号处被销毁 (如果确实如此)

我想依赖这个事实的原因是我想写一个简单的类来记录它何时进入/退出一个方法,比如:

class MethodTracing
{
string _signature;

public:
MethodTracing(string signature)
{
_signature=signature;
BOOST_LOG_TRIVIAL(trace) << "ENTERED " << _signature ;
}

~MethodTracing()
{
BOOST_LOG_TRIVIAL(trace) << "EXITED " << _signature;
}
};

然后我可以像这样使用它:

void myMethod( )
{
auto _ = unique_ptr<MethodTracing>(new MethodTracing(__FUNCSIG__) ) ;
/// ...
}

unique_ptr 在方法中创建时是否在方法结束时被销毁(假设它没有传递),这是否真实(且一致)?

是否还有我应该注意的其他隐藏(或其他!)陷阱?

更新:正如大多数答案所建议的那样,我本可以使用局部变量范围。我用 MethodTracing(__FUNCSIG__); 尝试了这个,但是当然,我没有分配局部变量!所以它立即超出了范围。我认为运行时很聪明,但不,是我太蠢了(在 C# 中太长了!)

最佳答案

您不需要这样做 - 依靠自动存储,例如

void myMethod( )
{
MethodTracing __sig(__FUNCSIG__);

// do stuff
}

__sig 会在函数作用域结束时自动销毁

(是的,__sig 是错误的形式,如果你愿意,可以称它为其他形式)

关于c++ - unique_ptr 的范围是常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8473549/

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