共享指向匿名结构的指针

时间:2016-01-26 00:28:14

标签: c++ smart-pointers

是否可以为*匿名结构创建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类型。

1 个答案:

答案 0 :(得分:3)

你可以得到你渴望的shared_ptr ......

std::shared_ptr<std::remove_pointer<decltype(tmpArgs)>::type> evtArgs(tmpArgs);

但您无法以任何有用的方式将其传递出此代码的范围。

如果您尝试确保仅通过shared_ptrweak_ptr引用该类,那么这可能会很有用,因此您将这些内容放在命名空间范围内。但这对我来说似乎远离了良好的编码风格。