小编rra*_*jik的帖子

在C++中是否有(新的)方法来测试类是否在模板中具有虚拟析构函数而不实例化实例?

我做了一些环顾四周,许多讨论说"不,你不能这样做",但它都在快速发展,我想在模板中测试这个特性,该模板无法访问指向实例的指针宾语.

c++ polymorphism

2
推荐指数
1
解决办法
67
查看次数

unique_ptr为具体类型

#include <iostream>
#include <memory>

class Base
{
public:
    virtual void foo() = 0;
};

class Derived : public Base
{
public:
    void foo() override { std::cout << "Derived" << std::endl; }
};

class Concrete
{
public:
    void Bar() { std::cout << "concrete" << std::endl; }
};

int main()
{
    std::unique_ptr<Concrete> ConcretePtr = nullptr;
    ConcretePtr->Bar();
    std::unique_ptr<Base> BasePtr;
    BasePtr->foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我假设将一个unique_ptr声明为具体类型Concrete,为类型的对象分配内存,Concrete而unique_ptr开始指向它.我的假设/理解是否正确?我问,因为ConcretePtr->Bar();打印机"混凝土"到控制台.但是,如果我创建一个指向接口的唯一指针Base,它不知道我需要的确切对象类型,也不知道在内存中分配/获取资源.

这失败BasePtr->foo();BasePtr._Mypair._Myval2 was nullptr.

为什么第一个声明std::unique_ptr<Concrete> ConcretePtr = nullptr; …

c++ pointers object-lifetime undefined-behavior unique-ptr

0
推荐指数
1
解决办法
411
查看次数