###問題
例のようにスマートポインタtarget_cost_にある値を、goal_cost_に保存したいのですがスマートポインタのコピーはできないということでした。OpenCVのプログラムでスマートポインタを使用しているため、どうにかしてスマートポインタ間で値をコピーする方法がないかお聞きしたいです。
###例
class Hoge{ public: void Run(); private: void Loop(); std::unique_ptr<GpuMat<float>> target_cost_; // 元のポインタ std::unique_ptr<GpuMat<float>> goal_cost_; //保存先にしたいポインタ ...
###備考
visual studio 2019
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
同時に2つの質問となってしましますがよろしくお願いいたします。
わかってると思いますが、質問は分けて欲しいですね。
例のようにprivateで定義した関数Loop()をpublic内の関数Run()で呼び出すことは不可能なのでしょうか。
Run の中で Loop を呼び出したいんですよね。できますよ。やってみましたか?
privateで定義したものはRunPrivate()のように同一のprivate内で定義した関数からしか呼び出せないと思っている
どうしてそう思ったのでしょうか。学ぶために使っている本などをもう一度見直してみるといいと思います。
投稿2020/07/19 08:50
編集2020/07/19 08:51総合スコア5308
0
本件の回答として不適切かもしれませんが,
GpuMat型自体が,参照カウントを管理している型である(std::shared_ptr相当)ようなので,
そもそもスマートポインタで管理する必要があるのか?という点から考えるべきように思います.
(まぁ,unique_ptr的な管理をしたい場面なのかもしれませんが)
投稿2020/07/20 02:07
総合スコア11996
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 09:26
2020/07/20 09:38 編集
2020/07/20 09:55
0
ベストアンサー
どうにかしてスマートポインタ間で値をコピーする方法がないかお聞きしたいです。
std::unique_ptrを使うのではなく
std::shared_ptrを使えばコピーできます。
c++
1#include <iostream> 2#include <memory> 3 4int main(){ 5 constexpr unsigned int size = 5;//要素数 6 7 auto mem1 = std::shared_ptr<int[]>(new int[size]); 8 auto mem2 = std::shared_ptr<int[]>(); 9 10 for(int i=0;i<size;i++)mem1[i] = i;//mem1へ数値代入 11 12 mem2 = mem1;//shared_ptrならコピーできる 13 14 for(int i=0;i<size;i++)std::cout << mem2[i] << std::endl;//mem2の内容表示 15 16 return 0; 17} 18 19
投稿2020/07/19 09:15
編集2020/07/19 09:33退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/19 12:39
退会済みユーザー
2020/07/19 21:13 編集
2020/07/20 08:57
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/19 09:06
2020/07/19 09:13
2020/07/19 09:16
2020/07/19 12:42