C++一个指针,我怎么知道传进来的地址是在堆上还是在栈上?

2022-10-06 22:44:12 +08:00
 kerrspace

假设我这个指针在 class 里面,从外面传进来的数据它既有可能是一个定义在栈区的 object ,又有可能是 new 在堆区上的

譬如我有一个 computer class ,然后 computer::computer(cpu*, gpu*, memory*) 在 int main 里面,我既可以 cpu c; gpu g; meory m; 然后 computer(&c, &g, &m)

也可以 computer(new cpu, new gpu, new memory)

那我在 class 里面怎么优雅地判断是哪一种情况?(要不要析构的时候销毁这三个 new ?)

BTW 。。我知道最简单的方法肯定是你就不要这么写

2895 次点击
所在节点    程序员
22 条回复
FrankHB
2022-10-07 16:35:01 +08:00
你要优雅,就先干掉 computer::computer(cpu*, gpu*, memory*)这种看不出让你怎么干的废物签名。
基本上除非在写分配器的实现,你一个一般应用的作者,没什么理(资)由(格)在 API 中用指针。
(写内核之类的东西原则上几乎都得依赖 ABI ,使用的假设比 C++的指针多得多。)
hu8245
2022-10-08 09:42:55 +08:00
我实在想不出什么普通场景需要这种骚操作,你操作了,人家释放的时候出问题了,算函数内的操作还是 caller ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884939

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX