gpt4 book ai didi

c++ - 防止早期对象破坏

转载 作者:太空狗 更新时间:2023-10-29 23:21:50 26 4
gpt4 key购买 nike

在C++中,如果我写

token make_token() { return token{}; }

然后如下使用

void use_token()
{
make_token();
// extra code
}

在不为变量分配标记的情况下,token 的析构函数会在执行额外代码之前触发。我怎样才能让析构函数只在函数结束时触发而不必创建变量?

注意:我想完全避免创建变量。我知道我可以做 auto& t = make_token() 或类似的,但我想通过返回 something (我不知道是什么)来避免这种情况立即触发析构函数。

为什么我想要这个:基本上,在我的应用程序(一种编程语言的编译器)中,我有这些称为 token 的东西。 token 的构造函数可以放置 { 和缩进,然后其析构函数可以放置 } 和取消缩进。我认为设置按值返回这些标记的函数是个好主意,但实际上我不想将它们分配给任何值,因为这些标记无用且没有任何功能。

为了减少混淆,我的标记 不是词法标记。我使用工作 token 代替工作 cookie。它意味着在构造函数中做一些事情,等到它的范围结束,然后在它的析构函数中做一些事情。就是这样。顺便说一句,如果我用 C# 写这个,我会写类似的东西

 using (make_token())
{
// my code here
}

它会按预期工作。但事实证明,如此简单的事情在 C++ 中很难。

最佳答案

是的。您可以使用常量引用。这在 C++ 中称为最重要的 const,这是一个鲜为人知的特性。

这是你如何做的:

void use_token()
{
const token& myToken = make_token();
// now myToken is alive until the end of this function.
}

但是你必须严格按值返回才能工作(你在你提供的代码中这样做)。

不信的小伙伴,请自己尝试一下再攻击帖子。

关于c++ - 防止早期对象破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399766/

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