typedef struct { int a; int b; } s;
class TTT { public : static void test(s *s1) { s1 = new s; }
}; int main() { s s1; TTT::test(&s1); s* s2 = &s1; delete s2; return 0; }
1 hailongs OP 我如果想释放 s1 这个,有方法释放吗? |
2 hailongs OP 不想传入的是指针,就想以一个对象穿进去。 |
3 hailongs OP 问题是这样的,我有一个对象,对象的引用传入一个函数中,这个函数会重新帮我 new 空间,那我调用结束后,如何释放函数里 new 的空间? |
![]() | 4 zdt3476 2017-03-21 19:16:54 +08:00 在 test 中 new 就在 test 中 delete. |
5 wevsty 2017-03-21 19:30:24 +08:00 这代码真心不知道怎么吐槽比较好。。。 如果想传入的是对象的引用,那么函数定义应该是这样的。 static void test(s &s1){} 自己 new 出来的东西就必须自己 delete 或者干脆用智能指针。 然后楼主这代码本身就有很大的问题。 test 函数里 new 出来的对象赋值给函数参数 s1 并不影响 main 函数里面的 s1 。所以你最后试图 delete 的是 main 函数里面的栈空间而不是 new 出来的堆空间。运行起来是肯定会有问题的。 |
6 laoyur 2017-03-21 19:34:29 +08:00 排版真垃圾,看着累死了 > 我如果想释放 s1 这个,有方法释放吗? 想在 main 中释放 test 函数 new 出来的那个 s ?照你现在的实现,没办法。 > 我有一个对象,对象的引用传入一个函数中,这个函数会重新帮我 new 空间,那我调用结束后,如何释放函数里 new 的空间? 通常的做法是传指针的指针进去,才能在函数调用结束后释放函数里 new 出来的对象。 |