Even if all ports are the same speed switches need to be able to use store and forward as a fallback. Otherwise when the network started to get busy a large number of packets would end up being dropped because their outgoing port was blocked with another transmission.
Regarding speeds if the incoming and outgoing ports are different speeds then the switch must take steps to accomodate that.
If the outgoing port is slower than the incoming port then it can start outgoing trasnmission as soon as it has received the frame headers and determined the destination port but it will end up having to buffer the bulk of the frame.
If the outgoing port is faster than the incoming port then it can't start transmission until it is sure it has received a sufficient proportion of the frame. Since "Ethernet II" frames don't have a length field that practically means wating for the end of packet marker making the switch effectively "store and forward".
As to shared memory verses per port buffers it would be possible to build a pure shared memory based switch but the demands on the shared memory system would be extremely high. The shared memory would have to be able to support multiple simultanious streams of data running at different speeds and writing to different parts of the memory. The total bandwidth of the shared memory would have to be extremely high.