2013/2/12 Michael Caisse <mcaisse-lists@ciere.com>
On 02/11/2013 04:04 PM, Scott Smedley wrote:
Hi all,

Is it possible to store std::shared_ptr objects in a boost::lockfree::queue?

eg. boost::lockfree::queue<std::shared_ptr<Message>> q;

Hi Scott -

Lockfree queues require that the queued type (T) meets the following requirements:

 o T must have a copy constructor
 o T must have a trivial assignment operator
 o T must have a trivial destructor


shared_ptr has neither a trivial assignment operator or destructor and cannot be used in the lockfree containers.

michael

Hello,

I'm curious: suppose T is a type, that meets requirements for lockfree queues. Does optional<T> meet those requirements?

a) Does optional<T> have a copy constructor? Yes.
b) Does optional<T> have a trivial assignment operator? Well, the assignment is user-written in optional, but it's observable effect is equivalent to memcpy, isn't it?
c) Does optional<T> have a trivial destructor? Well, optional's destructor conditionally calls T's destructor, which is trivial. So is a destructor trivial, if all it does is conditionally call a trivial destructor?

Regards,
Kris