gpt4 book ai didi

c++ - 返回对局部变量的引用 - C++

转载 作者:行者123 更新时间:2023-11-27 23:35:45 25 4
gpt4 key购买 nike

问题

如何在函数中返回对局部变量的引用?

#include <stdio.h>

class Array {
public:
bool stillAlive;

inline Array() : stillAlive{true} {}
inline Array(Array& array) : stillAlive{array.stillAlive} {}
/* Other constructors... */

inline ~Array() { this -> stillAlive = false; }

// My attempt at returning a local reference
// doesn't work because `tmp` gets destructed after the function returns.
inline Array& clone() {
Array tmp;
Array& arrayClone = tmp;
return arrayClone;
}
};

int main(void) {
Array array {};
Array clone {array.clone()};

::printf("array: %s\n", array.stillAlive ? "true" : "false");
::printf("clone: %s\n", clone.stillAlive ? "true" : "false");
::printf("array.clone(): %s", array.clone().stillAlive ? "true" : "false");

return 0;
}

我见过 static 关键字,但我不希望引用总是指向同一个变量。

对于指针,我知道可以在堆上分配内存,所以如果必须对值变量进行同样的操作,我也很满意(但我认为这是不可能的)。


EDIT: Attempted a solution that could use self-contained pointers.

尝试

那这个呢?局部变量引用一个自包含指针,该指针比其调用的函数的范围更持久。

#include <fcntl.h>
#include <stdio.h>

class Array {
private:
Array *cloneValue;

public:
bool stillAlive;

Array() : cloneValue{NULL}, stillAlive{true} {}
Array(Array& array) : cloneValue{NULL}, stillAlive{array.stillAlive} {}
/* Other constructors... */

~Array() { delete this -> cloneValue; this -> stillAlive = false; }

Array& clone() {
delete this -> cloneValue;
this -> cloneValue = new Array;

Array& arrayClone = *(this -> cloneValue);
return arrayClone;
}
};

int main(void) {
Array array {};
Array clone {array.clone()};

::printf("array: %s\n", array.stillAlive ? "true" : "false");
::printf("clone: %s\n", clone.stillAlive ? "true" : "false");
::printf("array.clone(): %s", array.clone().stillAlive ? "true" : "false");

return 0;
}

它似乎按预期工作并且似乎也没有任何内存泄漏。

最佳答案

做不到

改为返回局部变量的拷贝。

由于 C++11 移动构造函数的魔力,这通常会被优化掉。我什至看到机器代码删除了移动本身并运行,就好像函数已经传递了一个指向接收移动的对象的指针。

对于 C++11 及更高版本,似乎最好的编程方式就好像拷贝是免费的一样。然后分析您的代码,如果确实存在复制问题,您可以对其进行优化。

关于c++ - 返回对局部变量的引用 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59339012/

25 4 0
文章推荐: html - 如何仅使用 CSS 设置