看得出有情绪化。我还是看你的文字的,但是感觉上还是有疑问,所以反问,不过看了你的澄清还是觉得没完全得到point. 你也仔细考虑一下那些实际而适当具体的例子。或者你能不能也举一个实际而适当具体的scenaio来说明你的需求?
引用:
|
作者: sjinny 我在gc环境中的析构函数里可以做我想做的任何事吗?如果有限制,有什么样的限制?这种限制相比于栈上的对象析构又如何? |
析构函数只要不代表内存被释放的话,你需要的东西还是可以做到的。有一个现成的语言就是C++/CLI. 只不过我平时就忍了C#的using语法了。
来一点代码:
代码:
ref class R1
{
public:
R1() { Show("R1::ctor"); }
~R1() // dispose
{
Show("R1::dtor");
}
protected:
!R1() // finalizer
{
Show("R1::fnzr");
}
};
void _tmain()
{
R1 r;
int y=100;
}
这个貌似在stack上面的r其实还是在heap上分配的,但是dtor会被自动调用,由于定义了finalizer, 所以内存回收的时候还有机会干点别的。
这只是一个语法上面的技巧而以。对象的生命周期还是{}范围内。这是前面很篇幅吵架的第一点:对象生命期和内存管理没有必要绑定。
如果抛开内存细节,我觉得你想找一些管理对象生命期的模式。但是却一直拒绝允许一定随即性的暗箱操作的模式。但后面这种模式确是也是主流的,并且很方便。
再回头看你想要的管理模式:
引用:
|
2.管理机制确保将会按照使用者所描述的理想生命期边界上调用一次且仅一次。
|
我觉得没必要,比如gc管内存(注意:不管生命周期)。再看我那个DB connection pool管数据库连接,我描述的周期边界上立刻释放对于效率甚至是有害的。
所以感觉上你的需求有问题,所以先讨论你的需求的合理性。对于需求不合理的前提下去讨论,意义就不大了。另外,如果用不符合你的3点的管理技术蓬勃发展并且工作地很好,你想找的那种自然就很难找到。