gpt4 book ai didi

c++ - 防止创建具有静态生命周期的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:15 26 4
gpt4 key购买 nike

我们能否阻止创建具有静态生命周期的对象,同时允许创建具有自动生命周期的对象?

如果我们想阻止用户创建具有自动持续时间的类的实例,我们可以将析构函数设为私有(private)。如果我们想阻止用户创建具有动态分配的实例,我们可以将 operator new 设为私有(private)。

我认为不可能阻止用户创建具有静态存储持续时间的对象,因为唯一的区别是生命周期。但也许这里的一些专家可以设计出一种方法。

最佳答案

没有语言工具可以在编译时提供帮助。但在运行时,您可以使用以下技术来限制。假设您不想在static 存储区上放置MyObject,那么在析构函数中添加代码为:

bool ALLOW_OBJECTS = false;  // global variable
struct MyObject // class body
{
~MyObject ()
{
if(ALLOW_OBJECTS == false)
<print error message>
// ...
}
};

现在,在您的 main() 方法中,您可以将 ALLOW_OBJECTS 作为,

int main ()
{
ALLOW_OBJECTS = true; // objects can be created now
// ... other code
ALLOW_OBJECTS = false; // reset to 'false' before main() ends
}

现在事实是,在 main() 完成后,在 static 存储中声明的变量会消失其生命周期(调用析构函数)。因此,如果在 static 存储上声明了一个变量,其析构函数将打印一条错误消息(在文件或标准输出中)。

使用此检查,您的第 1 次执行测试运行可能会失败,但您可以在找到错误消息的数量后手动更正代码。因此,在您的生产代码中,您可以删除所有这些调试语句,并且您的代码将没有任何 static 存储对象 !!! (不适用于 POD 和指针)。

关于c++ - 防止创建具有静态生命周期的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587385/

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