C ++:如何将此指针传递给此类?

Posted

技术标签:

【中文标题】C ++:如何将此指针传递给此类?【英文标题】:C++: How do I pass this pointer into this class? 【发布时间】:2018-09-22 13:19:31 【问题描述】:

这是一段简单的代码。我需要帮助的是我写了“???”的两个地方。

目标是将临时指针传递给容器类,然后容器类将成为该对象的唯一所有者。但是,我写了“???”的两个地方不知道该写什么。

具体来说,我在初始化器列表中写了什么,当我实际实例化我的容器类时我应该写什么?

class abstractBase

    virtual void method() = 0;
;

class derived : public abstractBase

    // ...
;

class container

    std::unique_ptr<abstractBase> ptr;
    container(std::unique<abstractBase> input)
        : ??? //What do I write here to make input = ptr?
    
;

int main()

container instance(???) //what do I write here to pass a temporary ptr of type derived?

对于第一个,我想也许

: ptr(std::move(input))

会这样吗?

对于第二个,我不确定。也许只是std::make_unique&lt;derived&gt; input

【问题讨论】:

我建议为 abstractBase 使用虚拟析构函数。 ***.com/questions/274626/what-is-object-slicing 【参考方案1】:

是的,std::move 和 std::make_unique 应该在这里解决问题:

class container

    std::unique_ptr<abstractBase> ptr;

public:
    container(std::unique_ptr<abstractBase> input)
        : ptr(std::move(input))
    
;

int main()

    container instance(std::make_unique<derived>());

您可能还想看看this article 关于接收器参数和仅移动类型。

【讨论】:

以上是关于C ++:如何将此指针传递给此类?的主要内容,如果未能解决你的问题,请参考以下文章

如何将指向 C# 结构的指针传递给 C 中的方法

将二维数组指针传递给c ++中的函数[重复]

如何将 C# 中的方法指针传递给 C 库?

C语言基础:指针相关概念(指针的算术运算 指针数组指向指针的指针 传递指针给函数 从函数返回指针 )为啥C 语言不支持在调用函数时返回局部变量的地址?

如何将委托或函数指针从C#传递给C ++并使用InternalCall在那里调用它

如何将 void* 的引用从 C++/CLI 传递给本机 C 函数