C++ 在c++;

C++ 在c++;,c++,scope,delete-operator,C++,Scope,Delete Operator,我想完全掌握删除对象和数据类型的时间,包括我应该注意的所有异常和问题。以下是我到目前为止的理解。请纠正任何错误,并添加我错过的条件/情况 如果我在堆栈上创建一个对象或数据类型,当我离开创建它的范围时,它总是删除 如果我在堆上创建了一个对象或数据类型,当我调用delete时,它是deleteonly 从函数返回对象或数据类型时,将复制该对象或数据类型,并将副本从函数调用中传递出去,除非执行以下操作: return &ans; 其中ans是我要返回的对象,在这种情况下,将返回对象或数据类型

我想完全掌握删除对象和数据类型的时间,包括我应该注意的所有异常和问题。以下是我到目前为止的理解。请纠正任何错误,并添加我错过的条件/情况

如果我在堆栈上创建一个对象或数据类型,当我离开创建它的范围时,它总是删除

如果我在堆上创建了一个对象或数据类型,当我调用delete时,它是deleteonly

从函数返回对象或数据类型时,将复制该对象或数据类型,并将副本从函数调用中传递出去,除非执行以下操作:

return &ans;
其中ans是我要返回的对象,在这种情况下,将返回对象或数据类型本身

将参数传递到函数中使用&类似地避免复制参数

假设到目前为止我的理解是正确的,那么复制数据类型或对象会使用我定义的复制构造函数吗


感谢您的帮助

您不能在程序执行过程中“创建类型”。类型组成了一个程序,但它们不是程序可以操纵的东西。从C++17开始,只有当函数返回prvalue并且prvalue最终被具体化时,才会创建副本。第三点是不正确的。在c++11中可以对返回类型进行优化,即使是按值返回,也不会复制值,而是移动值。我所说的类型是类型的实例,如int、double、char等。如果有人能告诉我正确的返回术语,我将更改措辞this@fred这些称为对象。您不能“创建类型”作为程序执行的一部分。类型组成了一个程序,但它们不是程序可以操纵的东西。从C++17开始,只有当函数返回prvalue并且prvalue最终被具体化时,才会创建副本。第三点是不正确的。在c++11中可以对返回类型进行优化,即使是按值返回,也不会复制值,而是移动值。我所说的类型是类型的实例,如int、double、char等。如果有人能告诉我正确的返回术语,我将更改措辞this@fred这些被称为对象。