Visual C++ 2005中与C++的对比(内存的开辟、销毁)
Visual C++ 2005:
value class Myclass //值类型
{
private:
m_member;
public:
void method(void);
}
{
Myclass classObject; //在栈中为新建的对象实例classObject开辟一块内存
Myclass^ classPtr = gcnew Myclass(); //在托管堆中为classPtr所指的对象实例开辟一块内存
classPtr = &classObject; //利用&将classObject对象的地址赋给classPtr
delete classPtr; //调用析构函数来释放非托管资源
} //遇到封闭的大括号时会自动调用析构函数来释放确定性资源并销毁为classObject开辟的内存
// 托管堆中classPtr所指对象的内存会由垃圾回收器自动处理
ref class Myclass //引用类型
{
private:
m_member;
public:
void method(void);
}
{
Myclass classObject; //在托管堆中为新建的对象实例classObject开辟一块内存
Myclass^ classPtr = gcnew Myclass(); //在托管堆中为classPtr所指的对象实例开辟一块内存
classPtr = %classObject; //利用%将classObject对象的地址赋给classPtr
delete classPtr; //调用析构函数来释放非托管资源
} //遇到封闭的大括号时会自动调用析构函数来释放确定性资源
//托管堆中classObject所占内存、classPtr所指对象的内存会由垃圾回收器自动处理
C++:
class Myclass //标准的C++本地类
{
private:
m_member;
public:
void method(void);
}
{
Myclass classObject; //在栈中为新建的对象实例classObject开辟一块内存
} //遇到大括号时会自动调用析构函数来释放确定性资源//并销毁为classObject开辟的内存
Myclass* classPtr = new Myclass(); //在本地堆中为classPtr所指的对象实例开辟一块内存
classPtr = &classObject; //利用&将classObject对象的地址赋给classPtr
delete classPtr; //调用析构函数来释放资源并销毁为classPtr所指的对象实例开辟的内存
我思故我在