C++11 在更新指针之前自动调用delete

C++11 在更新指针之前自动调用delete,c++11,C++11,因为我不是一个开发者,我确信这是一个关键词研究问题 考虑到 class A { public: B* myBpointer; [...] } class B { [...] } 还有一个简单的片段: int main(int argc, char** argv) { A myA; while(1) { if(myA.myBpointer)delete myA.myBpointer; myA.myBpointer = new B; [...] } r

因为我不是一个开发者,我确信这是一个关键词研究问题

考虑到

class A
{
public:

B* myBpointer;
[...]
}


class B
{
 [...]
}
还有一个简单的片段:

int main(int argc, char** argv)
{
 A myA;

 while(1)
 {
    if(myA.myBpointer)delete myA.myBpointer;
     myA.myBpointer = new B;
     [...]
 }
return 0;
}

< P> > C++中有一种更好的方法来声明MyBooT,以避免在实际指派指针之前是否检查它是否为空,如果不使用或删除它,则赋值它之前?

< P>如果使用像“代码> STD::UNQUICHYPPTR <代码>或<代码> STD::SyrdYPPTR < /代码>,然后,它管理的内存将保持活动状态或按预期删除


若您分配给一个
唯一的\u ptr
,则在承担新内存的责任之前,它所管理的任何内存都将被删除

根据标题,听起来你想要一个像
std::unique_ptr
std::shared_ptr
这样的智能指针,我不知道我是怎么做到的,我想我按下shift+enter以继续执行代码块太多次了,这真的需要立即执行-1吗建议使用的两个智能指针@vu1p3n0x中的成员函数将完全执行此操作(如果存在旧对象,请释放旧对象,重新分配到新地址)。另外,安全的代码<删除> <代码>空指针,你不必自己测试它,编译器将确保正确地处理空指针值。谢谢你,我不知道,甚至存在,边问题,是使用“原始”指针在C++中的一个坏习惯,我是否应该使用STD的唯一/共享::从现在开始?我刚刚阅读了相关问题的答案。@A.albin视情况而定。在异国情调的情况下,您可能仍然需要它,a)您需要自己的内存管理器,例如,用于汇集数据或对其进行优化,尽管今天这些功能中的许多都是在标准库中实现的。b) 您的平台(通常是嵌入式的)决定了您对创建自己的库的偏好c)您必须与硬件相关的API交互,处理内核函数,在无法控制对象的地方编写内核模块\驱动程序。@A.albin一般来说,永远不要使用原始指针(通过
new
delete
管理指针对象生存期的原始指针)。使用智能指针进行生存期管理,使用原始指针或引用进行其他间接操作。