[英]Object initialization without “new” C++
我想知道C ++中的对象初始化。 如果可能,我应该避免使用'new'关键字,因为我不需要它提供的内容(动态分配,对吧?),我不想手动删除对象。 我在调用我的对象的初始化时没有使用新的麻烦。 我有这门课:
class Apodization {
public:
Apodization()
{
std::cout << "Constructor for Apodization" << std::endl;
}
}
而这段代码:
Apodization* apoObj();
// Apodization* apoObj = new Apodization();
使用new创建对象时,打印按预期发生,但不是没有。 我猜这是因为我只是在上面的例子中创建了Apodization类型的指针,但我不知道从那里去哪里。 我想知道在不使用new关键字的情况下初始化Apodization对象的正确方法。 谢谢您的帮助! 我发现来自Java和Python的C ++类有点奇怪。
使用RAII(资源分配是初始化)初始化没有new
的对象。 这意味着当您声明Apodization的实例时,实例的内存将在堆栈上分配 ,然后调用构造函数来设置初始状态。
这意味着只需写:
int main(){
Apodization apodization;
//apodization.doSomething();
return 0;
}
是你需要得到的球! (我自己也是一个Java人,我喜欢这个简洁!)
当对象在堆栈上分配时,析构函数将在作用域的末尾自动调用; 无需手动内存管理。
PS我强烈建议你阅读Bjarne Stroustrup C ++ 11编程指南 !
你不能。 new
运算符为对象分配内存,调用该对象的构造函数,然后返回指针。 在你的代码中,你所做的就是声明指针而没有为它预留任何内存,或者构造函数做任何工作。 它只是一个指向什么的指针。
只需创建一个静态实例:
static Apodization apoObj; // This will create an instance of the object.
如果您希望使用指针来访问它,那么指向静态实例:
static Apodization SapoObj; // This will create an instance of the object.
static Apodization* apoObj = &SapoObj;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.