C++ 什么时候应该动态或自动实例化对象?
例如,我应该使用:C++ 什么时候应该动态或自动实例化对象?,c++,pointers,object,C++,Pointers,Object,例如,我应该使用: Foo* object = new Foo ; 还是我应该使用 Foo object ; 如果我把代码弄错了,请更正。现在时间还早,我是个初学者。应尽可能避免使用新的操作员。它在所有领域都是浪费的——语法上、语义上、运行时以及空间和时间上。如果有一个对象可以在堆栈上分配,也可以在类中静态分配,那么就这样做。只有当您需要动态性时,才应该使用动态分配。如果您不需要动态分配,请不要使用动态分配。应尽可能避免使用新操作员。它在所有领域都是浪费的——语法上、语义上、运行时以及空间
Foo* object = new Foo ;
还是我应该使用
Foo object ;
如果我把代码弄错了,请更正。现在时间还早,我是个初学者。
应尽可能避免使用新的操作员。它在所有领域都是浪费的——语法上、语义上、运行时以及空间和时间上。如果有一个对象可以在堆栈上分配,也可以在类中静态分配,那么就这样做。只有当您需要动态性时,才应该使用动态分配。如果您不需要动态分配,请不要使用动态分配。应尽可能避免使用新操作员。它在所有领域都是浪费的——语法上、语义上、运行时以及空间和时间上。如果有一个对象可以在堆栈上分配,也可以在类中静态分配,那么就这样做。只有当您需要动态性时,才应该使用动态分配。如果您不需要它是动态的,就不要使用动态分配。在第一种情况下,您在堆中分配Foo
对象,而在第二种情况下,它在堆栈中分配
通常,在以下情况下,在堆中分配内容:
- Foo太大了,不能放进堆栈中
- 你不知道什么时候分配你的对象(你只需要在某些情况下分配它)
- 在堆栈弹出后,还需要延长对象的生存期
在大多数其他情况下(当动态分配对象很有用时,我可能忘记了一些其他常见场景),可能建议在堆栈中分配对象,因为这样在运行时成本更低,更不容易出错,也更容易处理。在第一种情况下,在堆中分配Foo
对象,而在第二种情况下,它是在堆栈中分配的
通常,在以下情况下,在堆中分配内容:
- Foo太大了,不能放进堆栈中
- 你不知道什么时候分配你的对象(你只需要在某些情况下分配它)
- 在堆栈弹出后,还需要延长对象的生存期
在大多数其他情况下(我可能忘记了动态分配对象很有用的一些其他常见场景),可能建议在堆栈中分配对象,因为它在运行时成本更低,更不容易出错,也更容易处理。使用新操作符分配对象后,需要使用delete操作符进行清理。所以在大多数情况下,如果没有必要,我会使用静态实例化
但是,由于静态实例化会将对象放在堆栈上,您可能会遇到内存问题:堆栈只能容纳这么多数据。因此,有时可能需要动态实例化对象。使用新操作符分配对象需要使用delete操作符进行清理。所以在大多数情况下,如果没有必要,我会使用静态实例化
但是,由于静态实例化会将对象放在堆栈上,您可能会遇到内存问题:堆栈只能容纳这么多数据。因此有时可能需要实例化对象。 < P> C++中的缺省值应该是使用对象本身,而不是指针(智能或其他),除非有特殊的原因否则。
要获取默认构造对象,必须关闭括号:
Foo object;
< >否则,编译器将把它作为函数的声明。 < P> C++中的缺省值应该是使用对象本身,而不是指针(智能或其他),除非有特殊的原因否则。
要获取默认构造对象,必须关闭括号:
Foo object;
否则,编译器将把它作为函数的声明。第二种用法应该是:
Foo object;
两者的区别在于,第一个是在堆上分配对象,第二个是在堆栈上分配对象。有很多不同之处,但这里有几个:
当您在堆上分配对象时,它将一直处于活动状态,直到您显式删除它,而在堆栈上分配的对象只有在函数结束时才处于活动状态
在堆上分配对象比在堆栈上分配对象更昂贵(就性能而言)
通常,您可以在堆上分配比在堆栈上多得多的对象
堆上分配的对象可以在线程之间传递,而堆栈上分配的对象则不能(这不是100%正确的,当另一个线程处理对象时,您可以使您的函数保持活动状态,但这是非常无用和低效的)
在堆栈上分配的对象将在您进入声明它们的范围后立即分配。有些情况下,您不一定希望总是分配它们,也就是说,您可能更喜欢在堆上使用动态分配
第二种用法应该是:
Foo object;
两者的区别在于,第一个是在堆上分配对象,第二个是在堆栈上分配对象。有很多不同之处,但这里有几个:
当您在堆上分配对象时,它将一直处于活动状态,直到您显式删除它,而在堆栈上分配的对象只有在函数结束时才处于活动状态
在堆上分配对象比在堆栈上分配对象更昂贵(就性能而言)
通常,您可以在堆上分配比在堆栈上多得多的对象
在堆上分配的对象可以在线程之间传递,而在堆栈上分配的对象则不能(这不是100%正确,您可以使函数