在不使用“new”的情况下在参数参数中实例化对象

时间:2016-04-29 18:43:03

标签: c++ oop object instantiation

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

示例:

wrapper.set_state( new Medium() );

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

你可以在堆栈上创建对象(简单地称为没有新的CTOR) - >但是在方法返回后对象将被“删除”。

wrapper.set_state( Medium() );

答案 2 :(得分:0)

当你使用" new"你动态地创造和反对,这是正确的。 使用" new"创建对象时你需要一个指向" hold"这个对象,您将通过该指针访问它。

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

如果您真的想以这种方式创建和反对,那么您可以尝试创建一个为您创建该对象的函数。