4 c++ pointers new-operator delete-operator
假设我有一个假设的指针,new如下所示:
int* hypothetical_pointer = new int;
Run Code Online (Sandbox Code Playgroud)
并创建另一个假设指针,具有相同的值:
int* another_hypothetical_pointer = hypothetical_pointer;
Run Code Online (Sandbox Code Playgroud)
如果我要删除这些用new声明的那些,我是否必须删除两个指针,或者只删除用new声明的指针?或者我可以删除指针吗?
Jam*_*lis 14
delete销毁指针指向的动态分配对象.如果有一个或100个指针指向该对象并不重要,则只能销毁一次对象.
在您之后delete hypothetical_pointer;,您无法使用hypothetical_pointer或another_hypothetical_pointer因为它们都没有指向有效对象.
如果你需要有多个指向同一个对象的指针,你应该使用共享所有权智能指针,比如shared_ptr,确保对象不会过早被破坏,并且它只被销毁一次.C++中的手动资源管理充满了危险,应该避免.
单次调用只有一个内存块new,因此delete当所有用户完成后,您必须只执行一次.
boost :: shared_ptr是一种很好的方式来容纳相同数据的多个用户 - 最后一个引用超出delete了底层内存块上的作用域触发器.
boost::shared_ptr<int> ptr1(new int);
boost::shared_ptr<int> ptr2(ptr1);
// memory deleted when last of ptr1/ptr2 goes out of scope
Run Code Online (Sandbox Code Playgroud)