我正在进入read access violation exception
类Base
析构函数,因为root_dse
之后超出范围CoUninitialize();
#include <atlbase.h>
#include <ActiveDS.h>
#include <memory>
#pragma comment(lib, "activeds.lib")
#pragma comment(lib, "adsiid.lib")
using namespace std;
class Base {
protected:
CComPtr<IADs> root_dse = nullptr;
public:
Base()
{
CoInitialize(nullptr);
}
virtual ~Base()
{
CoUninitialize();
}
virtual void do_stuff() = 0;
};
class Derived : public Base {
private:
void do_stuff() override {
const auto h_result = ADsOpenObject(L"LDAP://rootDSE",
NULL,
NULL,
ADS_SECURE_AUTHENTICATION,
IID_IADs,
(void**)&root_dse);
}
};
int main() {
std::shared_ptr<Base> base = std::make_shared<Derived>();
base->do_stuff();
return 0;
}
我怎样才能确保这root_dse
是release
之前CoUninitialize();
避免的read access violation exception
?
注意:所有派生类都在使用root_dse
,所以它应该在Base
类中。