C++ 在参数参数中实例化对象而不使用;新";

C++ 在参数参数中实例化对象而不使用;新";,c++,oop,object,instantiation,C++,Oop,Object,Instantiation,如果我想在一个参数参数内创建一个对象的新实例(在C++中),有没有一种不使用“new”的方法可以做到这一点。我的理解是,使用“new”关键字意味着我必须删除对象(动态分配?) 例如: wrapper.set_state( new Medium() ); 您可以在堆栈上创建对象(只需调用CTOR而不使用new)->但该对象将在方法返回后被“删除” wrapper.set_状态(Medium())只要set\u state通过常量引用获取参数,就可以在调用站点构造一个临时值: void Wrapp

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

例如:

wrapper.set_state( new Medium() );

您可以在堆栈上创建对象(只需调用CTOR而不使用new)->但该对象将在方法返回后被“删除”


wrapper.set_状态(Medium())

只要
set\u state
通过常量引用获取参数,就可以在调用站点构造一个临时值:

void Wrapper::set_state(const & Medium) { ... }

Wrapper wrapper;
wrapper.set_state(Medium());
临时文件的生存期将跨越
set\u state

否则,如果
set\u state
接受指针(也许不应该!),则需要将实例保持在调用之外:

void Wrapper::set_state(Medium*) { ... }

Wrapper wrapper;
{
  // Local block to explicitly manage lifetime of `medium`.
  Medium medium;
  wrapper.set_state(&medium);
}
当您使用“new”时,您可以动态地创建和创建对象,这是正确的。 当您使用“new”创建一个对象时,您需要一个指向“hold”这个对象的指针,并且您可以通过该指针访问它

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


如果你真的喜欢这样创建和对象,你可以尝试创建一个函数来为你创建这个对象。

@icbytes更新了这个问题。
set\u state
是否真的使用指针参数?或者它只是一个类型<代码>媒体< /COD>的参数?我认为C++有一个垃圾收集的形式。@ McTrand and C++没有垃圾收集,但是C++有一个对象生存的概念,你应该利用C++的行为在这方面为你自己的使用。这就是为什么它一开始就有某些行为:它是为了让你的生活更轻松。尽管它没有垃圾收集,但这并不意味着它不管理资源。C++11通过利用值和各种引用的语义,使您能够走得更远。