相关疑难解决方法(0)

为什么我们需要在C++中使用纯虚拟析构函数?

我理解虚拟析构函数的必要性.但为什么我们需要纯虚拟析构函数?在其中一篇C++文章中,作者提到我们在创建类抽象时使用纯虚析构函数.

但是我们可以通过将任何成员函数设置为纯虚拟来使类抽象化.

所以我的问题是

  1. 我们什么时候才能真正使析构函数变为虚拟?任何人都能给出一个很好的实时例子吗?

  2. 当我们创建抽象类时,将析构函数设置为纯虚拟是一种很好的做法吗?如果是..那为什么?

c++ destructor pure-virtual

151
推荐指数
6
解决办法
8万
查看次数

cds库:michael_deque在推回派生类型的自定义类型时导致崩溃(仅在发布模式下)

我正在使用带有默认优化设置(/ O2)的VS2012,此问题仅存在于发布模式中.

我有一些代码使用michael_deque(使用标准GC)和指向(抽象)类型的指针T.
当我尝试将指针推回到派生自的类型时,T应用程序在退出push_back()函数时崩溃michael_deque.

问题似乎完全取决于这种特定类型T,因为编写一个虚拟类foo,在类中派生它bar(并在构造函数中打印一些东西以避免它被优化掉),然后再推回到new bar()michael_deque不会导致崩溃.

T有问题的课程是这样的:

class Task
{
public:
    Task() : started(false), unfinishedTasks(1), taskID(++taskIDCounter) {};
    Task(unsigned int parentID_) : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(parentID_)/*, taken(0)*/ {};
    virtual ~Task() = 0 {};

    virtual void execute() final
    {
        this->doActualWork();
        unfinishedTasks--;
    }

    virtual void doActualWork() = 0;
public:
    unsigned int taskID;    //ID of this task
    unsigned int parentID;  //ID of the parent of …
Run Code Online (Sandbox Code Playgroud)

c++ libcds

3
推荐指数
1
解决办法
319
查看次数

标签 统计

c++ ×2

destructor ×1

libcds ×1

pure-virtual ×1