是否可以为*匿名结构创建shared_ptr? *我不太确定下面的结构是否构成匿名结构。例如;
struct { HWND hwnd; } *tmpArgs;
tmpArgs->hwnd = hwnd;
std::shared_ptr<struct> evtArgs(tmpArgs); // possible? right now its a compile error "'struct': missing tag name"
// usage
evtHandler( evtArgs ); // evtHandler( std::weak_ptr<void> EventArguments );
我有一个非常狭窄/专业的案例,我需要传递一个不会在应用程序中的任何其他地方使用的结构tmpArgs
。所以我不需要声明一个新的struct
类型。
答案 0 :(得分:3)
你可以得到你渴望的shared_ptr
......
std::shared_ptr<std::remove_pointer<decltype(tmpArgs)>::type> evtArgs(tmpArgs);
但您无法以任何有用的方式将其传递出此代码的范围。
如果您尝试确保仅通过shared_ptr
或weak_ptr
引用该类,那么这可能会很有用,因此您将这些内容放在命名空间范围内。但这对我来说似乎远离了良好的编码风格。