boost::python fails to handle std::unique_ptr as object holder

オープン
#202 コメント 12 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
cpp, python
領域
backend

調査の方向性

まず、boost/python/object/make_ptr_instance.hpp と issue に示されている Boost.Python class_ 宣言を使って例を再現します。std::auto_ptr は受け入れられるのに、unique_ptr holder がコピーされる理由を追跡します。報告された unique_ptr object-holder のケースがコンパイルでき、関連する動作のカバレッジがあれば完了です。

索引モデルが issue の本文から書いたものです。

説明

In ticket https://svn.boost.org/trac10/ticket/7711, 5 years ago, somebody complained that std::unique_ptr cannot be used as an object holder in boost::python. Although the ticket was closed, I still have the problem (in boost 1.58). Is there a solution available?

#include <boost/python.hpp>
#include <memory>

struct Foo {};

BOOST_PYTHON_MODULE(foo) {
    // This compiles fine.
    boost::python::class_<
          Foo
        , std::auto_ptr<Foo>
        , boost::noncopyable
        >("Foo1", boost::python::no_init)
        ;

    // This doesn't compile.
    boost::python::class_<
          Foo
        , std::unique_ptr<Foo>
        , boost::noncopyable
        >("Foo2", boost::python::no_init)
        ;
}

Compile error (std::unique_ptr misses copy constructor):
usr/include/boost/python/object/make_ptr_instance.hpp:24:38: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = moveit::python::Foo; _Dp = std::default_delete<moveit::python::Foo>]’

主要言語
C++
スター
537
フォーク
223
平均マージ
11時間 22分
マージ済み PR(30日)
2

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

boostorg/python のほかの issue

boostorg/python の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。