相关疑难解决方法(0)

C++:继承自std :: map

我想继承std::map,但据我所知std::map,没有任何虚拟析构函数.

因此可以std::map在我的析构函数中显式调用析构函数以确保正确的对象破坏吗?

c++ inheritance stdmap virtual-destructor

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

用C++扩展库

是否可以在没有源代码的情况下从C++库扩展类?标题是否足以允许您使用继承?我正在学习C++并且正在进入理论.我会测试这个,但我不知道怎么做.

c++ inheritance

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

使用std :: unique_ptr的C++ Pimpl Idiom Incomplete Type

我为证明问题所需的大量代码道歉.我在使用带有std :: unique_ptr的pimpl习惯用法时遇到了问题.具体地说,当一个类(具有pimpl'ed实现)被用作具有pimpl'ed实现的另一个复合类中的成员数据时,似乎会出现问题.

我能够找到的大部分答案都是缺少明确的析构函数声明,但正如你在这里看到的,我已经声明并定义了析构函数.

这段代码有什么问题,可以修改它来编译而不改变设计吗?

注意:错误似乎发生在SomeComposite :: getValue()的定义中,并且编译器在编译时才能看到错误.在memory.h中遇到错误,消息是'sizeof'的无效应用程序到不完整类型'pimplproblem :: SomeInt :: impl'.

SomeInt.h

#pragma once
#include <iostream>
#include <memory>

namespace pimplproblem
{
    class SomeInt
    {

    public:
        explicit SomeInt( int value );
        SomeInt( const SomeInt& other ); // copy
        SomeInt( SomeInt&& other ) = default; // move
        virtual ~SomeInt();
        SomeInt& operator=( const SomeInt& other ); // assign
        SomeInt& operator=( SomeInt&& other ) = default; // move assign
        int getValue() const;

    private:
        class impl;
        std::unique_ptr<impl> myImpl;
    };
} …
Run Code Online (Sandbox Code Playgroud)

c++ pimpl-idiom unique-ptr incomplete-type c++11

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