use*_*369 0 c++ memory-management
如何为类类型重载new运算符,以便它在堆栈而不是堆上分配内存(基本上这样用户之后就不必调用delete).
这样的事情怎么样:
class A{
private:
A(int i):
this->i(i);
{}
A a;
int i;
public:
void* operator new(size_t sz){
a(12);
}
};
Run Code Online (Sandbox Code Playgroud)
以上解决方案是否有效?
该new
操作被设计成实现动态分配(你是"上堆"呼叫什么),虽然你可以提供你自己的分配器,因此你不能拧成服从自动存储时间的对象的范围规则(你是什么呼叫"在堆栈上").
相反,写:
MyType myobject; // automatic storage duration
Run Code Online (Sandbox Code Playgroud)
或者,如果你不介意的动态存储时间,但只是想避免以后手动销毁,使用智能指针:
std::unique_ptr<MyType> myptr(new myobject()); // unique, dynamic storage duration
std::shared_ptr<MyType> myptr(new myobject()); // shared, dynamic storage duration
Run Code Online (Sandbox Code Playgroud)
这些都可以在C++ 11(std::
)和Boost(boost::
)中找到.
new
?另一种方法可能是放置新的,但这是一条黑暗而危险的旅行路径,我在这个阶段肯定不会推荐.或者,坦率地说,任何阶段......你通常仍然需要手动破坏.你获得的只是使用关键字new
,这似乎毫无意义.
归档时间: |
|
查看次数: |
528 次 |
最近记录: |