gpt4 book ai didi

c++ - 有条件地在c++中创建一个对象

转载 作者:行者123 更新时间:2023-11-30 05:07:35 35 4
gpt4 key购买 nike

我正在编写一个程序,可以选择可视化我正在处理的算法的输出 - 这是通过更改头文件中定义的 const bool VISUALIZE_OUTPUT 变量来完成的。在主文件中,我想要这种模式:

if(VISUALIZE_OUTPUT) {
VisualizerObject vis_object;
}
...
if(VISUALIZE_OUTPUT) {
vis_object.initscene(objects_here);
}
...
if(VISUALIZE_OUTPUT) {
vis_object.drawScene(objects_here);
}

但是,这显然无法编译,因为 vis_object 超出范围。我不想在条件之前声明对象,因为它是一个大对象,它需要可用于代码中的多个点(我不能只有一个条件语句来完成所有事情)。

执行此操作的首选方法是什么?

  • 在堆上声明对象并使用指针(或唯一指针)?
  • 在堆上声明对象并引用它因为它永远不会改变?
  • 其他选择?

最佳答案

引用在这里不可用,因为在声明时它应该引用一个已经存在的对象,并且存在于包含所有 if(VISUALIZE_OUTPUT) 的范围内。长话短说,必须无条件地创建对象。

所以恕我直言,一个简单的方法是在堆上创建它并通过指针使用它 - 不要忘记在完成时删除它。好处是指针可以初始化为nullptr,因此可以无条件删除。

但我认为最好的方法是将所有内容封装在一个在最高范围内创建的对象中。然后该对象将包含创建、内部使用和最终销毁实际 vis_object 的方法。这样,如果您不需要它,实际上不会实例化任何内容,但主过程不会因原始指针处理而困惑。

关于c++ - 有条件地在c++中创建一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347934/

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