I am trying to create an object using placement new
(I know to use smart pointers, this is just to learn). My code is as follows:
#include <vector>
#include <iostream>
#include <memory>
using namespace std; // please excuse this
// if you change like 19 to arr1 (or any other var name) instead of arr and line 40 to arr1 then it works
struct A
{
int in = 999;
A()
{cout << "A ctor\n";}
~A()
{cout << "A dtor\n";}
};
char arr[sizeof(A)];
class B
{
public:
static char arr[sizeof(A)];
const static A* a_obj;
B()
{
cout << "B ctor\n";
//cout << (a_obj->in) << endl;
}
~B()
{
cout << "B dtor\n";
}
};
const A* B::a_obj = new(arr) A;
int main()
{
B g;
}
I have created a global array
named arr and another array
named arr
in B
. It seems like when I do my placement new
the arr
being used is from the class as I get what I think are linker errors.
Why is this happening? why isn't the global arr
being used? If i change the placement new
to use my renamed global array
it works. I think it has to do something with lookups
but I don't have a concrete answer.