如果我想在参数参数(C++)中创建一个对象的新实例,有没有办法在不使用“新”的情况下做到这一点。我的理解是,使用“新”关键字意味着我必须处理删除对象(动态分配?)。在不使用“新”的情况下在参数参数中实例化对象
例子:
wrapper.set_state(new Medium());
如果我想在参数参数(C++)中创建一个对象的新实例,有没有办法在不使用“新”的情况下做到这一点。我的理解是,使用“新”关键字意味着我必须处理删除对象(动态分配?)。在不使用“新”的情况下在参数参数中实例化对象
例子:
wrapper.set_state(new Medium());
您可以创建堆栈(简单的电话没有新的显式的)对象 - >但该方法返回后,对象将被“删除”。
wrapper.set_state(Medium());
我认为C++有一种垃圾收集的形式。 –
@MartinRand不是默认的非托管C++ – ArchbishopOfBanterbury
@MartinRand C++没有垃圾回收,但C++有一个对象生命周期的概念,您应该利用C++在这方面的行为供您自己使用。这就是为什么它**有一定的行为开始:它在那里让你的生活更轻松。尽管它没有垃圾收集,但并不意味着它不管理资源。通过利用值的语义和各种引用,C++ 11使您能够走得更远。 –
只要set_state
通过const引用取参数,可以在调用点构造一个临时值:
void Wrapper::set_state(const & Medium) { ... }
Wrapper wrapper;
wrapper.set_state(Medium());
临时的寿命将跨越set_state
延伸。
否则,如果set_state
需要一个指针(也许它不应该!),你需要保持实例调用的外部:
void Wrapper::set_state(Medium*) { ... }
Wrapper wrapper;
{
// Local block to explicitly manage lifetime of `medium`.
Medium medium;
wrapper.set_state(&medium);
}
当您使用“新”你动态地创建和对象,那是对的。 当你使用“new”创建一个objet时,你将需要一个指向“hold”这个对象的指针,你将通过该指针访问它。
在C++ 11中,您有智能指针。如果你使用智能点,你不需要担心删除对象。你可以在YouTube上找到很好的教程。搜索“Bo Quian”关于智能指针的教程。
如果你真的想创建并以这种方式反对,你可以尝试创建一个函数为你创建对象。
@icbytes更新了问题。 –
'set_state'确实需要一个指针参数吗?或者它只是“Medium”类型的参数? – ArchbishopOfBanterbury