我的项目中有几个创建对象的函数。例如,如果你有一个函数来创建这样的对象:
int& f()
{
int *i = new int(5);
return *i;
}
然后当你打电话给你时
int x = f();
或类似
std::cout << f();
在函数中创建的int会发生什么?引用是像普通变量一样处理还是我做了一件非常错误的事情?如果是这样,制作对象的正确方法是什么?
答案 0 :(得分:7)
int x = f();
。
与第二种情况相同,std::cout << f();
- 如果您没有动态分配delete
int
,请不要使用此功能。
int
也会按值传递给std::basic_ostream::operator<<
,并制作副本。这实际上并不重要,没有普通代码会接受引用,然后调用delete &ref;
。
以下是您的链接:RAII。
我无法从你做出的例子中知道你想要什么,但是考虑按值返回,或者在多态的情况下使用智能指针。
答案 1 :(得分:0)
如果要显示该函数使用new委托创建对象的所有权,则必须使用std :: unique_ptr显式执行此操作。正如您所看到的,您的功能会自我记录,您无需查看正文以了解删除的响应:
std::unique_ptr<int> foo() {
return std::make_unique<int>(5);
}