Вы можете создать struct
частного конструктора, чтобы никто не мог создать из него, а затем создать функцию friend
, которая создает динамически размещенный объект и возвращает указатель на него, как показано ниже.
#include <iostream>
struct A{
~A() {
std::cout << "\nA has been destructed";
}
private:
A(/*args*/) {
std::cout << "\nA has been created";
}
friend A* creatA(/*args*/);
};
A* creatA(/*args*/){
return new A(/*args*/);
}
int main()
{
A* ptr = creatA();
delete ptr;
}
Это может быть лучше при использовании умных указателей и подсказок @Peter
#include <iostream>
#include <memory>
struct A{
A(/*args*/) {
std::cout << "\nA has been created";
}
friend std::default_delete<A>;
private:
~A() {
std::cout << "\nA has been destructed";
}
};
int main()
{
std::unique_ptr<A> ptr = std::make_unique<A>(/*Args*/);
}