相关疑难解决方法(0)

如何在C++中"返回一个对象"?

我知道标题听起来很熟悉,因为有很多类似的问题,但我要问问题的不同方面(我知道在堆栈上放置东西并将它们放在堆上之间的区别).

在Java中,我总是可以返回对"本地"对象的引用

public Thing calculateThing() {
    Thing thing = new Thing();
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

在C++中,要做类似的事情,我有2个选项

(1)每当我需要"返回"一个对象时,我都可以使用引用

void calculateThing(Thing& thing) {
    // do calculations and modify thing
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing thing;
calculateThing(thing);
Run Code Online (Sandbox Code Playgroud)

(2)或者我可以返回指向动态分配对象的指针

Thing* calculateThing() {
    Thing* thing(new Thing());
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing* thing = calculateThing();
delete thing;
Run Code Online (Sandbox Code Playgroud)

使用第一种方法我不必手动释放内存,但对我而言,它使代码难以阅读.第二种方法的问题是,我必须记住delete thing;,这看起来不太好.我不想返回复制的值,因为它效率低(我认为),所以这里提出问题

  • 是否有第三种解决方案(不需要复制值)?
  • 如果我坚持第一个解决方案,有什么问题吗?
  • 何时以及为什么要使用第二种解决方案?

c++ performance return reference

155
推荐指数
5
解决办法
8万
查看次数

引用计数智能指针的引用计数如何工作?

换句话说,实现如何跟踪计数?

是否存在一个类似于地图的对象,所有shared_ptr实例都可以访问它们,其键是指针的地址,值是引用的数量?如果我要实现一个shared_ptr,这是我想到的第一个想法.

在这些引用计数智能指针的情况下是否存在内存泄漏的可能性?如果是这样,我该如何避免它们?

c++ memory-leaks memory-management smart-pointers shared-ptr

28
推荐指数
1
解决办法
2万
查看次数