C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
我有一个指向对象的向量.我需要从向量中删除一个元素并将该元素放在另一个列表中.
我读到擦除可以用来从向量中删除对象,但我还读到它在执行之前调用对象析构函数.
我需要知道擦除对象是否也会破坏它.
请考虑以下代码.
using boost::shared_ptr;
struct B;
struct A{
~A() { std::cout << "~A" << std::endl; }
shared_ptr<B> b;
};
struct B {
~B() { std::cout << "~B" << std::endl; }
shared_ptr<A> a;
};
int main() {
shared_ptr<A> a (new A);
shared_ptr<B> b (new B);
a->b = b;
b->a = a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有输出.没有调用desctructor.内存泄漏.我一直认为智能指针有助于避免内存泄漏.
如果我需要在类中进行交叉引用,我该怎么办?
c++ ×3
boost ×1
c ×1
implementation-defined-behavior ×1
memory-leaks ×1
shared-ptr ×1
stl ×1
vector ×1