I think they make sense if used correctly; the act of toggling immediately changes the state of the app to match the state of the toggle. If you're tracking a dirty state and the action doesn't occur until a Save/etc button is clicked, it should be a checkbox.