如果我想在参数参数(在C ++中)中创建一个对象的新实例,有没有办法在不使用“new”的情况下执行此操作。我的理解是使用“new”关键字意味着我必须处理删除对象(动态分配?)。
示例:
wrapper.set_state( new Medium() );
答案 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"关于智能指针的教程。
如果您真的想以这种方式创建和反对,那么您可以尝试创建一个为您创建该对象的函数。