C++ unique_ptr
23 отговора
0 прегледа
C++ unique_ptr
Гледам хубаво си говорите за/със курви, Есте Лаудерчета, ебане и др., ама може ли да разваля купона с едно въпросче? :)
Имам един std::set с unique_ptr-та вътре (С++11) (вече го нямам де, но въпросът е принципен). Та исках да преместя елемент от един сет в друг, ама не намирам atomic начин, щото докато е в единия сет е immutable и т.н...
Имам един std::set с unique_ptr-та вътре (С++11) (вече го нямам де, но въпросът е принципен). Та исках да преместя елемент от един сет в друг, ама не намирам atomic начин, щото докато е в единия сет е immutable и т.н...
Re: C++ unique_ptr
Не разбирам C++ много много - само основите. Видях следния пример он-лайн. Защо тук работи, а при теб не?
#include <iostream>
#include <memory>
struct Foo {
Foo() { std::cout << "Foo::Foo\n"; }
~Foo() { std::cout << "Foo::~Foo\n"; }
void bar() { std::cout << "Foo::bar\n"; }
};
void f(const Foo &foo)
{
std::cout << "f(const Foo&)\n";
}
int main()
{
std::unique_ptr<Foo> p1(new Foo); // p1 owns Foo
if (p1) p1->bar();
{
std::unique_ptr<Foo> p2(std::move(p1)); // now p2 owns Foo
f(*p2);
p1 = std::move(p2); // ownership returns to p1
std::cout << "destroying p2...\n";
}
if (p1) p1->bar();
// Foo instance is destroyed when p1 goes out of scope
}
#include <iostream>
#include <memory>
struct Foo {
Foo() { std::cout << "Foo::Foo\n"; }
~Foo() { std::cout << "Foo::~Foo\n"; }
void bar() { std::cout << "Foo::bar\n"; }
};
void f(const Foo &foo)
{
std::cout << "f(const Foo&)\n";
}
int main()
{
std::unique_ptr<Foo> p1(new Foo); // p1 owns Foo
if (p1) p1->bar();
{
std::unique_ptr<Foo> p2(std::move(p1)); // now p2 owns Foo
f(*p2);
p1 = std::move(p2); // ownership returns to p1
std::cout << "destroying p2...\n";
}
if (p1) p1->bar();
// Foo instance is destroyed when p1 goes out of scope
}
Re: C++ unique_ptr
е то философски сет от уникални неща е безсмислено, ама все пак :)
Re: C++ unique_ptr
Не е безмислено, IMHO.
Mного по-безмислено е "аз не знам ц++, нито ти разбирам въпроса, ма ей сега щи обясня"
Инак на теб ти трябва атомик трансфер от един сет в друг като пропърти на сет-а, а не се сещам да има такова. (може и да бъркам)
Mного по-безмислено е "аз не знам ц++, нито ти разбирам въпроса, ма ей сега щи обясня"
Инак на теб ти трябва атомик трансфер от един сет в друг като пропърти на сет-а, а не се сещам да има такова. (може и да бъркам)
Re: C++ unique_ptr
Еми не намирам и аз, то не можеш и да го извадиш...
Иначе да, чакам есте лаудерките да се включат :Р
Иначе да, чакам есте лаудерките да се включат :Р
Re: C++ unique_ptr
хехе. Аз харесвам С++, но не го използвам в работа и се радвам като имам възможност да се образовам. Разбирам какво значи атомик трансфер. Знам какво значи имютъбал. Съдържанието на обекта не може да бъде променяно. Не разбирам защо не може да се трансферира пойнтъра от единия сет в друг пойнтър в другия сет. Съдържанието не се променя. Пак ще си е кий.
Re: C++ unique_ptr
иначе философски - щото не можеш да добавиш втори път нещо, не можеш и да търсиш по нещо, щото е уникално :)
Re: C++ unique_ptr
От друга страна имютъбал има различни значния. Какво става ако направиш move? run-time error?
Re: C++ unique_ptr
Ако веднага изтриеш излишния пойнтър след като направиш move, вярвам че ще работи. Ако някой друг може да оперира върху този сет, трябва да се лок-не първо. Но дали е редно да се стига до там на първо време...това е друг въпрос.
Re: C++ unique_ptr
Аз подхождам към въпроса логически, което често в по-добре от някой експерт в синтаксиса, който се загубва в него. Тъй че ако имаш проблеми, питай бати си пешо коня, на който си искаш език.

Re: C++ unique_ptr
Това няма ли да свърши работа:
template< class T, class Deleter >
void swap( unique_ptr<T,Deleter> &lhs, unique_ptr<T,Deleter> &rhs );
template< class T, class Deleter >
void swap( unique_ptr<T,Deleter> &lhs, unique_ptr<T,Deleter> &rhs );
Re: C++ unique_ptr
Имах предвид да суапне сет1 със сет2. Какво има в сетовете няма значение. Сега прочетох обаче че той иска конкретни елементи ми не всички.
п.с. Не че суапа е атомик, но като цяло и неговото задание е доста неясно каква цел точно преследва.
п.с. Не че суапа е атомик, но като цяло и неговото задание е доста неясно каква цел точно преследва.
Редактирано от synergie_bg на
Re: C++ unique_ptr
Да, и тъй като тия елементи са уник, той не може да направи сет Б да има всички без 1 плюс новия, че да мине това.