2016-04-29 72 views
-2

如果我想在参数参数(C++)中创建一个对象的新实例,有没有办法在不使用“新”的情况下做到这一点。我的理解是,使用“新”关键字意味着我必须处理删除对象(动态分配?)。在不使用“新”的情况下在参数参数中实例化对象

例子:

wrapper.set_state(new Medium()); 
+0

@icbytes更新了问题。 –

+0

'set_state'确实需要一个指针参数吗?或者它只是“Medium”类型的参数? – ArchbishopOfBanterbury

回答

0

您可以创建堆栈(简单的电话没有新的显式的)对象 - >但该方法返回后,对象将被“删除”。

wrapper.set_state(Medium());

+0

我认为C++有一种垃圾收集的形式。 –

+0

@MartinRand不是默认的非托管C++ – ArchbishopOfBanterbury

+0

@MartinRand C++没有垃圾回收,但C++有一个对象生命周期的概念,您应该利用C++在这方面的行为供您自己使用。这就是为什么它**有一定的行为开始:它在那里让你的生活更轻松。尽管它没有垃圾收集,但并不意味着它不管理资源。通过利用值的语义和各种引用,C++ 11使您能够走得更远。 –

2

只要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); 
} 
0

当您使用“新”你动态地创建和对象,那是对的。 当你使用“new”创建一个objet时,你将需要一个指向“hold”这个对象的指针,你将通过该指针访问它。

在C++ 11中,您有智能指针。如果你使用智能点,你不需要担心删除对象。你可以在YouTube上找到很好的教程。搜索“Bo Quian”关于智能指针的教程。

如果你真的想创建并以这种方式反对,你可以尝试创建一个函数为你创建对象。

相关问题