gpt4 book ai didi

C++ 多态行为 : swapping derived pointer types

转载 作者:太空宇宙 更新时间:2023-11-04 16:23:59 24 4
gpt4 key购买 nike

观察下面的代码:

class A { public: virtual void Foo() = 0; int Bar; };

class B : public A { public: B( float X ); void Foo(); private: float X; };

class C : public A { public: C( float Y ); void Foo(); private: float Y; };

现在,在某些函数中,假设我这样做:

A*& pToA = pToDerived; // allocated as A* pToDerived = new B( ... );

pToA = pToC; // allocated as A* pToC = new C( ... );

这有效吗?如果是这样,即使 pToA 是对 pToDerived 的指针的引用,它是否会导致内存泄漏?

SSCS

假设 Node 有 2 个或更多派生自它的类型。这是我目前正在实现的链表中的一个片段,它可能需要多态性才能正常工作,因为它并不意味着是通用的。 newnode 是传递给插入函数的参数。

    Node* iNode;

for( iNode = mStart; iNode != mEnd; iNode = iNode->Next )
{
if ( iNode->Key == k ) // Replace current node with newnode
{
newnode->Next = iNode->Next;
newnode->Prev = iNode->Prev;

*iNode = *newnode;

delete newnode;

return; // We're done, so we quit.
}
}

// Node doesn't alreay exist, so we add it.

Node*& uglyhack = mEnd;

iNode->Next = newnode;
newnode->Prev = iNode;
uglyhack = newnode;

最佳答案

这和做是一样的

pToDerived = pToC;

这本身并没有错。只有当您从不删除对象时,它才会泄漏内存,就像往常一样。

在更新后的代码中,您可以这样做:

iNode->Next   = newnode;
newnode->Prev = iNode;
mEnd = newnode;

它会是一样的。

关于C++ 多态行为 : swapping derived pointer types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13854696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com